Quando você está familiarizado com o Git (e o DVCS em geral) e começa a explorar as mudanças na reescrita do histórico, está seguro se o repositório for apenas local, mas poderá encontrar problemas se trabalhar com controles remotos e tentar empurre essas mudanças.
Um recurso que eu esperaria é a capacidade de ativar um "modo de segurança" que basicamente me impediria de fazer o que eu não deveria fazer ... E o que eu quero dizer com isso? Quero dizer mudanças na reescrita da história para coisas já enviadas para uma origem. Não posso defini-lo com precisão, mas isso incluiria casos como:
commit --amend
quando HEAD já foi pressionadorebase
de uma filial não localreset
de um ramo que foi empurrado
Estes são exemplos de situações que provavelmente causarão a próxima push
falha (porque não seria um avanço rápido, IIRC). Fiz isso por acidente e tive que recriar a filial no controle remoto. E ainda tive a sorte de fazer isso rápido o suficiente para que ninguém fizesse parte da história que reescrevi.
Acredito que é possível identificar esse tipo de alterações e, sob demanda, impedir que o usuário as faça. Existe talvez uma opção para isso?
Se não houver, você acha que vale a pena tentar criá-lo? Você tentaria definir com precisão como identificar uma "mudança perigosa"?
--force
.Respostas:
Isso parece muito próximo, se não a mesma pergunta que Estratégia para impedir ou capturar a reescrita do histórico do Git
Para resumir, você pode ativar
git config --system receive.denyNonFastforwards true
e
git config --system receive.denyDeletes true
Ou escreva um gancho de recebimento de mensagens para rejeitar qualquer coisa que você determinar como reescrita.
fonte
denyNonFastforwards
é o padrão (?), EnquantodenyDeletes
não é. Esses dois são úteis, mas estou imaginando uma solução do lado do cliente que me impediria de executar uma açãocommit --amend
se eu não pudesse pressioná-la (porque HEAD já foi enviado).denyNonFastfowards
atrue
apenas sobre o branch master? Eu gostaria que meus ramos de tópicos pudessem ser reformulados e pressionados à força.Não, porque faz parte da filosofia do git fornecer a você todo o poder e permitir que você gerencie esse poder da maneira que desejar.
Se você não aderir a essa filosofia, talvez valha a pena mudar para o Mercurial, pois permite reescrever a história, mas de maneira limitada ou, para ser clara e relutante, que faz com que você sinta que não é uma boa ideia.
fonte
AFAIK, a maneira como o git resolve esses problemas é que sempre que você solicitar uma ação, ela será executada localmente, mas informará que o que você está fazendo pode ter consequências indesejáveis. Nesse ponto, você ainda não enviou nada, então você está em posição de revisar seu repositório local e, possivelmente, desfazer a mudança perigosa antes de fazer o envio. Você precisa prestar atenção no que o git está dizendo a você, e é melhor ter cuidado ao reparar esses erros.
fonte