2

假设 master 和 origin/master 分歧。
我在 master 上,我想在我的提交之后从 origin/master 提交提交,然后推送 --force。

     A---B---C origin/master
    /
D---E---F---G *master

     A---B---C origin/master
    /
D---E---F---G---A'---B'---C' *master

变体 1:

git branch -f tmp
git reset --hard origin/master
git rebase tmp

这种变体很糟糕,因为 'git reset --hard' 会检出一些文件,而 'git rebase' 在应用提交之前会再次重写它们。这是一份多余的工作。
变体 2:

git branch -f tmp origin/master
git rebase --onto master master tmp
git branch -f master
git checkout master

命令太多。我只想用一个命令来做到这一点。

4

1 回答 1

2

我得到了答案:

git cherry-pick HEAD..origin/master

虽然cherry-pick不像rebase那么聪明,并且在这种情况下不会丢弃提交(k,l,m):

     /--k---l---m---A---B---C origin/master
    /
D---E---k'--l'--m'---F---G *master
于 2013-04-18T08:24:38.703 回答