Minha abordagem pessoal a um commit do git é que todo commit deve incluir uma unidade de mudança , em sua completude.
Quando desenvolvo, geralmente me concentro nessas unidades. Mas, às vezes, minha atenção se desvia para outro lugar e trabalho por um tempo em uma unidade diferente. Provavelmente não é o ideal, mas aprendi a me comprometer com cuidado ( git add --interactive
é um bom amigo meu).
No entanto, pode acontecer que eu esqueça de preparar seletivamente minhas alterações e, em vez disso, comprometa o arquivo inteiro, acreditando que todas as alterações que vejo no diff estão realmente relacionadas à mesma unidade, mesmo que possa haver uma ou duas alterações completamente independentes.
Então eu git push
.
Isso é perigoso? Devo fazer um esforço para alterar o commit para que ele inclua apenas as alterações pretendidas? Minha principal preocupação é que quem quer que veja a história verá a mudança e provavelmente coçará a cabeça por vários minutos antes de perceber que é provavelmente um erro. Pior ainda, posso imaginar que a mudança pareça relacionada e o programador pode não reconhecer o erro.
O problema é que, como já enviei por push, não consigo reescrever com segurança o histórico do servidor, portanto, provavelmente eu teria que reverter a confirmação, dividi-la corretamente e confirmar novamente. Como alternativa, eu poderia simplesmente alterar o commit com uma mensagem de commit melhor, mas eu teria que ser realmente muito rápido, pois também requer reescrever o histórico. Como último recurso, eu poderia simplesmente confirmar a unidade em que estava trabalhando, deixando uma observação de que há uma alteração relacionada na confirmação anterior (mas isso parece errado).
Entendo que em configurações de vários desenvolvedores com fluxo de trabalho de revisão de código adequado, isso provavelmente não aconteceria. Também entendo que, se eu sou o único desenvolvedor de um projeto, a reescrita do histórico é a melhor solução para isso.
Respostas:
Confirmar histórico é de vital importância, mas por 3 razões:
Portanto, embora a unidade de trabalho comprometa o som ideal, eles não são algo para se insistir em termos práticos. Eu tentaria manter os commits sensatos, e a unidade de trabalho é uma boa maneira de manter os commits sãos, mas não se preocupe em tentar mexer no histórico de commit apenas para manter os commits organizados. É como atualizar um arquivo de código para alinhar todos os colchetes da maneira que você preferir - agradável, mas inútil.
Agora, se você comprometeu um pouco do trabalho destinado a uma ramificação diferente, reverta-a e comprometa-a corretamente na ramificação correta. Isso é importante, mas se você atualizou um pouco do código do servidor enquanto trabalha na GUI, não há necessidade de se preocupar com isso.
fonte
Quando isso acontece, não é grande coisa simplesmente reverter a alteração no próximo commit. Adicionar uma mensagem de confirmação adequada (
Removing the XYZ that I accidentally added in C92A891
) será suficiente para outros desenvolvedores entenderem na revisão de código.Em vez de se preocupar em corrigir qualquer incidente específico, tente evitar a situação em primeiro lugar.
Essa é a verdadeira questão:
Você deve adquirir o hábito de nunca confirmar um arquivo inteiro (ou pior ainda, de todo o seu espaço de trabalho!). Sempre confirme linha por linha ou por um pedaço inteiro que você examinou.
Ao confirmar dessa maneira (o que parece que você faz na maioria das vezes), as alterações inadvertidas têm muito menos probabilidade de se infiltrar nos seus commits.
fonte
Parece que você tem um repositório local no seu computador e um repositório compartilhado com seus colegas de trabalho em um servidor. Por que você possui apenas um repositório no seu computador local? Normalmente tenho pelo menos cinco, para poder trabalhar em uma coisa em um repositório, corrigir um bug em outra sem tocar no primeiro repositório, que pode estar em um estado incompleto, e assim por diante.
fonte