Estou aprendendo o git e notei que ele tem um processo de confirmação em duas etapas:
git add <files>
git commit
O primeiro passo coloca as revisões no que é chamado de "área intermediária" ou "índice".
O que me interessa é por que essa decisão de design é 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 porque venho do bzr (Bazaar) que não possui esse recurso.
version-control
git
workflows
thomasrutter
fonte
fonte
git add -p
, poderá optar por confirmar um pedaço de um arquivo sem comprometer outro pedaço do mesmo arquivo .git status
e possivelmentegit push
. Para todo o hype sobre o git, (e o código de compartilhamento do GitHub é maravilhoso), as partes são muito irritantes #Respostas:
Divida o trabalho em confirmações separadas. Você provavelmente já abriu muitas vezes um arquivo para escrever uma correção de linha única, mas, ao mesmo tempo, percebeu que a formatação estava incorreta, alguma documentação poderia ser aprimorada ou outra correção não relacionada. Com outros RCSs, você teria que anotá-lo ou enviá-lo para a memória, concluir a correção pela qual veio, confirmar e depois retornar para consertar as outras coisas (ou criar uma confirmação de bola de lama com coisas não relacionadas) . Com o Git, você apenas corrige tudo de uma só vez e estágio + confirma a linha única separadamente, com
git add -i
ougit-gui
.Não quebre a construção. Você está trabalhando em uma modificação complicada. Então você tenta coisas diferentes, algumas das quais funcionam melhor que outras, outras que quebram. Com o Git, você prepararia as coisas quando a modificação melhorasse as coisas e
checkout
(ou ajustaria um pouco mais) quando a modificação não funcionasse. Você não precisará confiar na funcionalidade de desfazer do editor, podecheckout
repo inteiro, em vez de apenas arquivo por arquivo, e qualquer erro no nível do arquivo (como remover um arquivo que não foi confirmado ou salvar + fechar após uma modificação incorreta) não leva a muito trabalho perdido.fonte
git add -i
commit de estágio único? Você apenas seleciona um monte de arquivos (ou linhas dentro de arquivos) relacionados a um único recurso e faz um commit. Então você teria que voltar e fazer uma segunda cometer relacionada com uma outra característica ..git-branch
maneira do tipo ( jovicailic.org/2017/04/vim-persistent-undo ). Além disso, seu histórico de desfazer é rastreado automaticamente sempre que você entra no modo normal. Portanto, reduz a carga mental de ter que criar "pontos de desfazer manuais". Por que o uso de seus editores "desfazer" os buffers não é tão metódico?Um dos benefícios para mim é a capacidade de "adicionar" arquivos progressivamente. Antes de confirmar, reviso cada arquivo. Depois que o arquivo é revisado, eu o adiciono. Quando eu
git status
ougit diff
, o git mostra apenas os arquivos que foram modificados e ainda não foram adicionados. Depois de revisar todos os arquivos e adicioná-los, posso confirmar.Então, sim, acho a área de preparação muito útil.
E não, eu nunca uso
git commit -a
. No entanto, eu costumo usargit add -u
. Dessa forma, ainda posso visualizar o que deve ser comprometido.fonte
O benefício é bastante simples: fornece controle total sobre quais arquivos você deseja confirmar quando. Nesse caso, você pode usar
git add -p
para controlar quais linhas você deseja confirmar.fonte
.gitignorelines
para que você pudesse fazer alterações locais em linhas individuais que pudessem sobreviver às confirmações e permanecer intactas.app.conf
que contém as coisas que deseja compartilhar e, em seguida,db.conf
coloca as que você acabou de colocar na lista .gitignore. Problema resolvido. Se você estiver usando algo proprietário, deve realmente procurar algo tão simples lá. Ou coloque-o através de um pré-processador em um evento de pré-construção. Muitas soluções lá.Um dos benefícios que eu gosto é a capacidade de cometer uma parte de uma mudança. Ou seja, usando git add -e. Eu não cometo com a frequência que deveria às vezes, e o comando git add -e me permite desvendar minhas alterações até certo ponto.
fonte