2015-04-12 52 views
3

考虑下面的树:如何“重新绑定”一次提交?

A --- B --- C --- D --- E --- F --- master 
\ 
    \ 
    B' --- C' --- D' --- topic 

其中(B != B')。我想做git rebase --onto master master topic但这会产生冲突。但情况更简单:我想将单个topic提交到主。

git checkout master 
git cherry-pick topic 
git checkout topic 
git reset --hard master 
git checkout master 
git reset --hard HEAD~1 

是不是可以用一个命令执行上面的命令?

+0

为什么不直接修复冲突? –

+0

因为实际上没有冲突... – user3719454

+0

可能重复[git rebase单一提交](http://stackoverflow.com/questions/14635672/git-rebase-a-single-commit) –

回答

2

第一重置您的分支,然后使用引用日志找到承诺樱桃挑:

git checkout -B topic master # re-create topic branch at the commit of master 
git cherry-pick [email protected]{1} # copy the old tip of the topic branch 

另一个 - 甚至是简单的 - 方式是通过衍合一系列的提交仅由您希望重新提交的单次提交:

git rebase --onto master topic^ topic 
+0

如果我明白' -B标志正确,第二个樱桃选择应该说没有什么可做的,因为它试图挑选相同的提交主指向,我认为'topic @ {1}'应该被直接散列承诺,纠正我,如果我错了。 –

+0

@MohammadAbuShady:'topic @ {1}'引用分支指向的上一次提交。在结帐/重置之前,它指向'D',结帐后它指向'F'。 'topic @ {0}'为'F','topic @ {1}'为'D','topic @ {2}'为'D'前指向的任何提交(最可能是'C '' – knittl

+0

hm,这很有趣,所以如果例如我做了'git rebase origin/develop',那么我发现我搞砸了一个冲突或者什么,我可以简单地做一个'git reset --hard develop {1} '? –

相关问题