develop branch
--> dashboard (working branch)
Eu uso git merge --no-ff develop
para mesclar todas as alterações upstream no painel
log do git:
commit 88113a64a21bf8a51409ee2a1321442fd08db705
Merge: 981bc20 888a557
Author: XXXX <>
Date: Mon Jul 30 08:16:46 2012 -0500
Merge branch 'develop' into dashboard
commit 888a5572428a372f15a52106b8d74ff910493f01
Author: root <[email protected]>
Date: Sun Jul 29 10:49:21 2012 -0500
fixed end date edit display to have leading 0
commit 167ad941726c876349bfa445873bdcd475eb8cd8
Author: XXXX <>
Date: Sun Jul 29 09:13:24 2012 -0500
A mesclagem tinha mais de 50 confirmações nela, e eu estou querendo saber como reverter a mesclagem para que o painel volte para a pré-mesclagem de estado
A segunda parte disso é que, se eu não me fundir --no-ff
, não recebo o commit ' Merge branch' develop 'into dashboard ' .. Como eu reverteria essa mesclagem?
Respostas:
A reversão de uma consolidação de mesclagem foi exaustivamente abordada em outras perguntas. Quando você faz uma mesclagem de avanço rápido, a segunda que você descreve, pode usar
git reset
para voltar ao estado anterior:Você pode encontrar o
<commit_before_merge>
comgit reflog
,git log
ou, se você estiver sentindo o moxy (e ter o resto não fez nada):git reset --hard HEAD@{1}
fonte
reflog
é um salva-vidas.HEAD@{1}
descreve apenas o segundo estado mais recente de HEAD, ou mais tecnicamente: "Uma ref seguida pelo sufixo @ com uma especificação ordinal incluída em um par de chaves (por exemplo, {1}, {15}) especifica o n-ésimo valor anterior desse valor ref. "Daqui:
http://www.christianengvall.se/undo-pushed-merge-git/
Git revert adiciona um novo commit que reverte o commit especificado.
O uso de -m 1 indica que isso é uma mesclagem e queremos reverter para o commit pai na ramificação principal. Você usaria -m 2 para especificar o ramo de desenvolvimento.
fonte
here
link no comentário @Hilikus não é mais válido. O site afirma que o conteúdo foi movido para um livro ( git-scm.com/book/en/v2 ), mas, nesse caso, não é trivial localizar nele.Apenas redefina o commit de mesclagem com
git reset --hard HEAD^
.Se você usar --no-ff, o git sempre cria uma mesclagem, mesmo que você não cometa nada no meio. Sem --no-ff, o git fará um avanço rápido, o que significa que seus ramos HEAD serão definidos como HEAD do ramo mesclado. Para resolver isso, localize o ID do commit que você deseja reverter para e
git reset --hard $COMMITID
.fonte
Mas pode ter efeitos colaterais inesperados. Veja a
--mainline parent-number
opção em git-scm.com/docs/git-revertTalvez uma maneira bruta, mas eficaz, seja verificar o pai esquerdo desse commit, fazer uma cópia de todos os arquivos, fazer checkout
HEAD
novamente e substituir todo o conteúdo pelos arquivos antigos. Então o git dirá o que está sendo revertido e você criará seu próprio reverter commit :)!fonte
Reverting a merge commit declares that you will never want the tree changes brought in by the merge. As a result, later merges will only bring in tree changes introduced by commits that are not ancestors of the previously reverted merge. This may or may not be what you want.
git reset
é a solução, mas também menciona que pode ter efeitos colaterais inesperados. No entanto, essa ligação é degit revert
, nãogit reset
:)git revert
nãogit reset
Se você mesclou a ramificação, reverteu a mesclagem usando uma solicitação pull e mesclou essa solicitação pull para reverter.
A maneira mais fácil que senti foi:
git revert -m 1 xxxxxx
(se a reversão foi mesclada usando uma ramificação) ou usandogit revert xxxxxx
se fosse uma reversão simplesfonte