Git - Problemas com o Rebase Interativo e Esmagar
Pergunta
Eu sei que há muitas perguntas sobre ISSO, mas eu não consigo encontrar a resposta que eu estou procurando em tudo.
Eu só mescladas a minha tarefa ramo em meu mestre, e eu estou pronto para levar minha mudança para o remote branch master.No entanto, eles são exibidos como dois compromete-se:
commit 878c07412aab6a6b06b7fc8dd84c2418cc4f31d8
Merge: 9ffa590 c9f5552
Author: ***
Date: Mon May 21 16:02:36 2012 +0100
Merge branch 'modelUpdate4'
Conflicts:
***.xcodeproj/project.pbxproj
commit c9f5552862872673317701c3dffd7fb6b6daa02c
Author: ***
Date: Mon May 21 15:03:21 2012 +0100
Modified model according to requests. Repopulated seeded database.
Esta é a saída do git log e os dois se compromete eu gostaria de squash como um.No entanto, quando eu faço:
git rebase -i HEAD~2
Ele, na verdade, apenas exibe 4 anteriormente cometido (e empurrou a) compromete-se.Eu sou mal-entendido como meus ramos são mescladas de volta?Se eu tentar e git rebase -i Isso só mostra o primeiro commit no git log lista.
Obrigado!
Solução
Desde que você disse quatro compromete-se já estavam empurrou, eu estou supondo que o gráfico (git log --oneline --decorate --graph
) semelhante a este, onde você tem ramificação compromete-se entre master
e modelUpdate4
já empurrou para o repo remoto:
* (master, modelUpdate4, HEAD) Merge branch 'modelUpdate4'
| \
| * (origin/modelUpdate4) Modified model according to requests. [HEAD^2]
| |
| * Another commit on modelUpdate4
| |
| * Yet another commit on modelUpdate4!
| |
* | (origin/master) Something that conflics with a commit in modelUpdate4 [HEAD~1]
| /
* Previous commit on master [HEAD~2]
HEAD~2
é o primeiro pai do primeiro pai, e desde o seu HEAD
é uma série de modelUpdate4
em master
, refere-se a duas compromete-se para baixo da master
linha. HEAD^2
é HEAD's
segundo progenitor, de modo a confirmar antes de HEAD
para baixo a modelUpdate4
linha.(Veja também: http://paulboxley.com/blog/2011/06/git-caret-and-tilde)
Se HEAD~2
é a sua nova base, você irá obter todos os compromete-se entre HEAD~2
e master
em uma linha reta.Você também terá de lidar com o ramo de conflito na modelUpdate4
cometer onde ele acontece.
* (master, HEAD) Merge branch 'modelUpdate4'
|
* Modified model according to requests. Repopulated seeded database.
|
* Another commit on modelUpdate4
|
* Yet another commit on modelUpdate4!
|
* Something on master that conflics with modelUpdate4
|
* Previous commit on master
Se alguém está usando os balcões situados em locais remotos, ou você quer manter seu ramificação da história, não rebase.Ele vai reescrever a história que já está no repo remoto, que só vai ser uma dor de cabeça para o resto do mundo.Empurre a série confirmar e você vai ser ouro.
Como alternativa, você pode alterar a base diretamente no origin/master
. origin/modelUpdate4
iria acabar no git boonies, mas já que é uma tarefa ramo eu estou apostando que você estava indo para excluí-lo de qualquer maneira.