Como posso reverter um intervalo de confirmações no git? De olhar para as gitrevisions documentação , não consigo ver como especificar o intervalo necessário. Por exemplo:
A -> B -> C -> D -> E -> HEAD
Eu quero fazer o equivalente a:
git revert B-D
onde o resultado seria:
A -> B -> C -> D -> E -> F -> HEAD
onde F contém o reverso do BD inclusive.
Respostas:
Qual versão do Git você está usando?
A reversão de várias confirmações é suportada apenas no Git1.7.2 +: consulte " Reversão para uma confirmação antiga usando a reversão várias vezes " . Para obter mais detalhes.
A
git revert
página de manual atual é apenas para a versão atual do Git (1.7.4+).Como o OP Alex Spurling relata nos comentários:
A atualização para 1.7.4 funciona bem.
Para responder minha própria pergunta, esta é a sintaxe que eu estava procurando:
B^
significa "o primeiro commit pai de B": que permite incluirB
na reversão.Consulte a
git rev-parse
seção " ESPECIFICANDO REVISÕES ", que inclui a sintaxe<rev>^
, por exemploHEAD^
: veja mais em " O que o^
caractere de sinal de intercalação ( ) significa? ")Observe que cada confirmação revertida é confirmada separadamente.
Henrik N esclarece nos comentários :
Como mostrado abaixo, você pode reverter sem confirmar imediatamente:
fonte
git revert OLDER_COMMIT^..NEWER_COMMIT
^
para um parâmetro de revisão significa o primeiro pai desse objeto de confirmação".Se você deseja reverter o intervalo de confirmação B para D (pelo menos na versão 2 do git) em uma única confirmação, você pode fazer
Isso reverte as alterações feitas por confirmações do commit pai de B (excluído) no commit D (incluído), mas não cria nenhum commit com as alterações revertidas. A reversão modifica apenas a árvore de trabalho e o índice.
Não se esqueça de confirmar as alterações depois
Você também pode reverter várias confirmações não relacionadas em uma única confirmação, usando o mesmo método. por exemplo, para reverter B e D, mas não C
Referência: https://www.kernel.org/pub/software/scm/git/docs/git-revert.html
Obrigado Honza Haering pela correção
fonte
git revert -n B..D
não reverte a confirmação B, apenas C e D.git revert -n B^..D
reverte B também.git revert -n master~5..master~2
:, diz o quinto commit mais recente incluído. Masmaster~5
é realmente o sexto mais recente commit. Consulte a seleção de revisões nos documentos do git para obter informações detalhadas sobre..
notação :-)Fazer
git revert OLDER_COMMIT^..NEWER_COMMIT
não funcionou para mim.Eu usei
git revert -n OLDER_COMMIT^..NEWER_COMMIT
e está tudo bem. Estou usando a versão git1.7.9.6
.fonte
-n
ou--no-commit
reverterá todas as alterações no intervalo em uma única confirmação, em vez de criar uma confirmação de reversão para cada confirmação no intervalo. O resultado final é o mesmo, pois as mesmas alterações serão revertidas. Depende apenas de como você deseja que seu histórico do git seja.Use
git rebase -i
para esmagar os commits relevantes em um. Então você apenas tem um compromisso para reverter.fonte