Devo usar o git stash para salvar as alterações em andamento do meu projeto e enviá-lo ao github para acessar em outros computadores?


20

Costumo trabalhar em alguns recursos do meu projeto que preciso fazer uma pausa antes que seja bom o suficiente para uma confirmação. No entanto, uso diariamente dois computadores diferentes para codificar (meu laptop e minha área de trabalho do laboratório de pesquisa). Por exemplo: estou trabalhando em um recurso em casa, então paro e vou para o meu laboratório.

Não quero misturar a sincronização em nuvem (por exemplo, Dropbox) com o rastreamento remoto do GitHub.

Simplesmente cometi estados inacabados (e confusos) do meu código antes (e o empurrei) apenas com o objetivo de extrair isso no outro computador para continuar o trabalho. Tenho certeza de que é uma prática ruim.

Hoje, porém, me deparei com o Google git stashum pouco. Parece ser a solução perfeita para o que eu preciso.

No entanto, a documentação não diz se vai para o github depois que eu envio minhas alterações. Além disso, quero saber se existe uma maneira mais eficiente de realizar a mobilidade de que preciso.

Desde já, obrigado!


1
Eu estou votando para fechar esta questão como off-topic, porque isso já foi respondido no Stack Overflow
David Arno

5
@ DavidArno: Eu não acho que é uma duplicata entre sites. A pergunta do StackOverflow é sobre "Posso executar o X" e esta é sobre "O X é uma boa prática". No mínimo, a causa raiz da questão é diferente.
Greg Burghardt

7
@ DavidArno a última vez que verifiquei, "Já respondi no SO" não é um motivo para fechar uma pergunta.
RubberDuck

Respostas:


28

Simplesmente cometi estados inacabados (e confusos) do meu código antes (e o empurrei) apenas com o objetivo de extrair isso no outro computador para continuar o trabalho. Tenho certeza de que é uma prática ruim.

Não há problema em cometer um trabalho inacabado confuso. Faça seu trabalho em uma ramificação de tópico. Comprometa cedo e comprometa-se frequentemente. Leia sobre quando confirmar o código? para obter algumas diretrizes sobre quando fazer um commit. Especificamente para o Git, comprometa-se com um ramo de tópico e envie-o quantas vezes quiser.

Se este ramo de tópico for apenas para você, confirme e envie códigos quebrados. Você só deve adiar a partir empurrando código quebrado a um ramo que é usado por outras pessoas. Sinta-se livre para quebrar seu próprio código.


6
Eu diria até mais forte: nunca trabalhe no ramo principal, use sempre um ramo de tópico. Comprometa-se como achar melhor, empurre-o sem medo. Quando estiver satisfeito com as alterações, mescle-o para dominar.
9000

Ótimo conselho! Eu acho que a grande confusão pode acontecer porque precisamos adicionar um comentário a um commit e, às vezes, literalmente será algo como "tarefa em andamento" ou algo assim. E sim, estou trabalhando sozinho neste ramo, então tudo o que você disse faz sentido!
Leandro

4
Isto também lhe dá a opção de esmagamento commits individuais em um ao mesclar seu ramo git merge bugfix --squash
snoopy

2
As mensagens de confirmação do @Leandro devem ser tão atômicas e claras quanto faça sentido. Por exemplo, mesmo que seja WIP, você pode dizer, por exemplo, "Adicionando controlador para lidar com solicitações de página - WIP". As mensagens de confirmação também fornecem um histórico pesquisável das alterações feitas no projeto. Dez confirmações de "WIP" não ajudariam ninguém a procurar uma mudança em torno de lidar com usuários, por exemplo.
Ben

7

Os stashes destinam-se ao uso local, como um local temporário para colocar as coisas enquanto você mexe nos galhos.

Se você é o único que trabalha em uma ramificação, não há problema em confirmar código quebrado. O que faço quando em situações semelhantes é fazer um commit quebrado, depois de puxá-lo para outro local, faça um git reset HEAD~1para desfazê-lo. Obviamente, isso requer o uso --forceno pullse pushesquando você muda de local.

Ou apenas espero até meu primeiro commit e faço a git commit --amend. Ou simplesmente comprima todas as confirmações quebradas quando confirmo o ramo do recurso. Ou simplesmente não me preocupo com alguns comprometimentos claramente marcados na minha história, porque tendem a não sair até que esteja em um bom ponto de parada. Há muitas opções.


1
Eu não recomendaria se acostumar, --amendpor isso exige --forceos empurrões, no entanto. Melhor se comprometer apenas com um ramo descartável.
leftaroundabout

1

stashnão é realmente satisfatório para nada, além de limpar seu diretório de trabalho para "descompactar seu ramo"; se você não stash popvoltar imediatamente ao estado, as coisas ficarão muito confusas.

Se houver trabalho real a ser salvo, mesmo que não seja bom para uma entrada permanente de repo, ainda deve ser uma confirmação. Na verdade, nunca deixo meu diretório de trabalho em um estado que não esteja sob controle de versão - uso alguns scripts Python muito simples para salvar todas as alterações como uma confirmação temporária. Se você quiser experimentar, aqui está o que fazer:

  1. Quando você tiver feito algum trabalho inacabado e estiver prestes a deixar o local de trabalho, execute git-tmp-commit. Ele confirmará automaticamente todas as alterações em uma ramificação nova e exclusiva.
  2. Empurre esta ramificação para o controle remoto.
  3. Sair.
  4. Quando você quiser continuar, clone novamente essa ramificação do controle remoto. Eu faço isso com o ccdscript, que efetivamente verifica tudo, desde o zero até uma pasta temporária , escolhendo automaticamente o ramo mais recente ... mas você também pode buscar e fazer checkout manualmente do ramo a temporary-commits/original-branch/YYYY-MM-DD...partir de um clone existente do repositório.
  5. Por fim, "cancele a confirmação" das alterações com git-tmp-commit -r. Isso o levará de volta à ramificação original (por exemplo master) e deixará as alterações da confirmação temporária no diretório de trabalho, para que você possa continuar aqui até a hora de uma confirmação adequada (ou temporária, se precisar sair novamente).

† Da maneira como o script está escrito agora, isso só funciona se não houver ramificação masterno depósito de checkout . Então, na dúvida, você precisaria git branch -d master; isso obviamente não é realmente ideal ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.