Existe uma maneira de refazer uma mesclagem no git?


17

Então, cometi um grande erro. Fiz um commit, puxei, mesclei (mas atrapalhei o código enquanto fazia isso) e depois empurrei. Gostaria de refazer essa mesclagem e obter o código correto. Há alguma maneira de fazer isso?

Eu uso bitbucket.

git 

10
Apenas uma observação - esse tópico é realmente sobre SO e não deveria ter sido migrado. Tente ler suas próprias páginas de ajuda em algum momento e observe as ferramentas de software comumente usadas pela linha de programadores . Dito isto, também está no tópico aqui - SwiftCore, não se sinta mal por ter sido migrado, não foi sua culpa.
21413 Bob

Respostas:


13

Não tenho certeza se essa é a maneira "abençoada" de fazê-lo, mas aqui está o que eu fiz para resolver o mesmo problema sem ter que "forçar o empurrão" ou algo do tipo.

Vamos supor que seu histórico se parece com isso (e M é a mesclagem em flocos):

-A--B--C--M (master points here)
  \      /
   D----E

Correr git checkout -b merge_fix <commit ID E>cria um ramo antes de cometermos erros:

-A--B--C--M (master points here)
  \      /
   D----E (HEAD and merge_fix point here)

Agora, vamos refazer a mesclagem em nosso novo ramo. Não podemos simplesmente nos unir master, por isso precisamos escolher manualmente o commit antes da nossa mesclagem incorreta: git merge <commit ID C>não cometa os mesmos erros que você fez da última vez!

-A--B--C--M (master points here)
  \      X
   D----E-G (HEAD and merge_fix point here)

Supondo que o commit Gpareça bom, agora queremos sincronizar com a parte superior do masterramo. Este comando diz ao git para ignorar as alterações que foram feitas para dominar e forçar nossas alterações a se tornarem o resultado da mesclagem:git merge -s ours master

-A--B--C--M (master points here)
  \      X  \
   D----E-G--H (HEAD and merge_fix point here)

Por fim, (supondo novamente que o commit Hpareça bom, queremos avançar rapidamente masterpara incluir nossa mesclagem fixa:

git checkout master
git merge merge_fix

Isso realmente move o masterponteiro de ramificação para H, mas aproveitarei a oportunidade para limpar um pouco minha arte ASCII:

-A--B--C--M--H (HEAD, master, and merge_fix all point here)
  \      X  /
   D----E--G

E aí está! você refez com êxito a mesclagem sem invalidar nenhum histórico!


6

Você pode fazer isso assim:

  1. Redefina o commit antes da mesclagem.
  2. Execute a mesclagem novamente
  3. Forçar pressão

Isso é:

git reset --hard SHA1
git merge branchname
git commit
git push --force remotename branchname

Lembre-se de que git push --forcereescreverá o que você tinha na ramificação remota e outras pessoas que usarem essa ramificação também poderão ser afetadas por isso. (Normalmente você não deve fazer isso.)


6
Basta lembrar fazendo git push --forcenão é seguro
Zepplock

1

git merge --abort e então você pode mesclar novamente


Acabei de receber um "não há merge para abortar" mensagem

3
Isso só pode ser feito quando houver conflitos de mesclagem.
usar o seguinte código

por que o menos um? isso me ajudou.
swdev

Porque a pergunta é sobre quando você já concluiu a mesclagem (incorretamente) e pressionou.
Robin Green

-1

Por favor, verifique esta esperança de que seja útil para você

https://www.kernel.org/pub/software/scm/git/docs/howto/revert-branch-rebase.html

Embora isso possa responder à pergunta do OP, apenas as respostas do link não são bem aceitas no SO. No entanto, você pode citar em sua resposta os trechos mais relevantes do link.

Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
Pranav #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.