Qual é o benefício do processo de commit de dois estágios do git (staging)?

167

Estou aprendendo o git e percebi que ele tem um processo de confirmação em duas etapas:

  1. git add <files>
  2. git commit

O primeiro passo coloca revisões no que é chamado de "área de teste" ou "índice".

O que me interessa é por que essa decisão de projeto é tomada e quais são seus benefícios?

Além disso, como usuário git, você faz isso ou apenas usa git commit -a ?

Eu pergunto isso como eu venho de bzr (Bazaar), que não tem esse recurso.

    
por thomasrutter 18.04.2011 / 10:46
fonte

4 respostas

79

Dividir o trabalho em commits separados. Você provavelmente já abriu várias vezes um arquivo para escrever uma correção de linha única, mas ao mesmo tempo você percebeu que a formatação estava errada, alguma documentação poderia ser melhorado ou alguma outra correção não relacionada. Com outro RCS s você teria que escrever isso ou memorizá-lo, terminar a correção para a qual você veio, confirme isso, e então retorne para consertar as outras coisas (ou crie um commit de bola de lama com coisas não relacionadas). Com o Git, você corrige tudo de uma só vez, e o stage + confirma a única linha separadamente, com git add -i ou git-gui .

Não quebre a compilação. Você está trabalhando em uma modificação complicada. Então você tenta coisas diferentes, algumas das quais funcionam melhor que outras, algumas que quebram as coisas. Com o Git você organizaria as coisas quando a modificação melhorasse as coisas, e checkout (ou ajustaria mais algumas) quando a modificação não funcionasse. Você não precisará depender da funcionalidade de desfazer do editor, você pode checkout o repo inteiro em vez de apenas arquivo por arquivo e quaisquer erros de nível de arquivo (como remover um arquivo que não foi confirmado ou salvar + fechamento após uma modificação ruim) não leva a muito trabalho perdido.

    
por 18.04.2011 / 11:38
fonte
63

Um dos benefícios para mim é a capacidade de "adicionar" arquivos progressivamente. Antes de confirmar, eu reviso cada arquivo. Depois que o arquivo é revisado, eu o adiciono. Quando eu git status ou git diff , o git mostra apenas os arquivos que foram modificados e que ainda não foram adicionados. Quando revisei todos os arquivos e os adicionei, posso confirmar.

Então, sim, acho a área de teste muito útil.

E não, eu nunca uso git commit -a . No entanto, geralmente uso git add -u . Desta forma, eu ainda posso visualizar o que deve ser cometido.

    
por 18.04.2011 / 11:13
fonte
21

O benefício é bastante simples: ele lhe dá controle total sobre quais arquivos você quer cometer quando. Para essa questão, você pode usar git add -p para controlar quais linhas você deseja confirmar.

    
por 18.04.2011 / 18:14
fonte
1

Um dos benefícios de que gosto é a capacidade de confirmar uma parte de uma alteração. Ou seja, usando git add -e. Eu não faço commit tão frequentemente quanto deveria às vezes, e o comando git add -e me permite desvendar minhas alterações até certo ponto.

    
por 19.04.2011 / 01:54
fonte