git rebase - 仅使用一些提交

时间:2012-06-28 18:05:19

标签: git

我做了一些提交,比如提交A,B,C 现在我想只将A和B提交到远程仓库。 (并保持提交C合并并在以后推送) 在我推动之前,我需要运行:

git fetch origin master
git rebase --merge FETCH_HEAD

问题是上面的命令会让我解决提交C的冲突,我现在不打算推送。

是否可以在不必处理提交C的情况下进行rebase。

由于

2 个答案:

答案 0 :(得分:5)

在rebase之前保存

保存提交以便推迟处理冲突的最简单方法是标记它,以便稍后引用提交:

$ git tag save-commitC <sha1>

没有提交C

的重新绑定

保存引用后,不使用commit进行rebase:

$ git rebase --interactive --merge FETCH_HEAD

它应该打开你的编辑器文件,如下所示:

pick <sha1> <message>
pick <sha1> <message>
pick <sha1> <message>
...

要从此分支的历史记录中删除提交C,只需删除或注释掉提交的pick <sha1> <message>行。

请注意,提交以相反的顺序列出,最早的提交第一个,最近的提交最后。列表上的第一个提交应该是第一个不是FETCH_HEAD的祖先的提交。

一旦你没有C进行重新定位,请继续推进:

$ git push origin master

重新提交提交

当您准备将其应用于重新分支的分支时:

$ git cherry-pick save-commitC
   # resolve merge conflicts
$ git commit
$ git tag -d save-commitC

答案 1 :(得分:1)

您可以重置为提交b,然后存储您的更改,推送,然后重新应用您的存储。

git reset HEAD~1
git stash
(rebasing or whatever other intermediate steps required go here)
git push
git stash pop