Vindo de um plano de fundo do SVN, uma das coisas mais difíceis de se acostumar ao trabalhar com sistemas DVCS é a maneira como todos parecem considerar qualquer mudança não confirmada como uma bomba-relógio.
No Mercurial, se você tentar buscar alterações e tiver alguma alteração não confirmada em sua cópia de trabalho, precisará passar por bastidores para conseguir que apenas as alterações recebidas sejam mescladas. Tente alternar ramificações? Isso forçará você a arquivar tudo e, em seguida, você deverá desmontar tudo do outro lado. (O SVN não tem problemas com nenhum desses cenários.)
Git é da mesma maneira. Estou trabalhando lado a lado com outro desenvolvedor em um projeto e apenas tentei escolher um de seus commits no meu fork. Ele se recusou a me deixar porque eu tinha alterações não confirmadas em minha cópia de trabalho, em arquivos completamente diferentes dos que foram alterados em seu commit. Não há nem uma opção de mesclagem; aparentemente eu tenho que esconder minhas alterações primeiro!
Se uma pessoa tratasse algo completamente inofensivo com tanta cautela, eu chamaria isso de "fobia", um medo irracional que deveria ser considerado um distúrbio mental. Mas Git e Mercurial foram projetados por duas equipes diferentes de desenvolvedores inteligentes e racionais, então eu tenho que me perguntar se eles sabem de algo que eu não conheço.
Existe uma razão técnica que justifique essa atitude em relação a mudanças não confirmadas? E se sim, por que o problema em questão parece existir apenas nos DVCSes?
fonte
Respostas:
Currículo
Não é uma fobia, é (por vezes dura) a aplicação de seguir de boas maneiras "cometer muitas vezes" (SVN-usuários, por vezes, têm medo deste estilo)
E, finalmente,
hg qnew|qpop|qpush
é um pequeno preço justo pela organização e ordemfonte
Quando você mescla ou seleciona cereja
git
, você está criando um commit imediatamente. A operação não será concluída até que a confirmação seja concluída e faça parte do histórico.Agora, o que aconteceria se
git
lhe permitisse encobrir as alterações não confirmadas no seu diretório de trabalho? Você teria dificuldade (mais ou menos) de diferenciar entre os conflitos de alterações / mesclagem dos quais precisa cuidar da seleção de mesclagem / cereja e as alterações que você se apresentou. Além disso, seria quase impossível para você testar o que realmente está comprometendo.Assim, forçar um diretório de trabalho limpo para situações de mesclagem ajuda a manter as coisas simples e gerenciáveis. Afinal, tudo o que você precisa fazer é ocultar suas alterações não confirmadas antes da mesclagem e descompactá-las posteriormente. Observe que no fluxo de trabalho
você tem duas (!) operações de mesclagem. Um que mescla sua última confirmação com as alterações recebidas e outro que mescla suas alterações não confirmadas com a confirmação de mesclagem resultante. Dessa forma, você só precisará mesclar duas coisas em uma, evitando a confusão que resultaria da tentativa de mesclar três coisas em uma em uma única operação enquanto tentava ignorar essas três coisas. O
git stash
/git stash pop
torna fácil e explícito que você esteja ignorando as alterações não confirmadas para a mesclagem.fonte