6

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

git fetch origin master
git rebase --merge FETCH_HEAD

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

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

谢谢

4

2 回答 2

8

在变基之前保存

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

$ git tag save-commitC <sha1>

无提交的变基 C

保存参考后,在没有提交的情况下重新设置:

$ 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

重新应用提交

当你准备好将它应用到 rebased 分支时:

$ git cherry-pick save-commitC
   # resolve merge conflicts
$ git commit
$ git tag -d save-commitC
于 2012-06-28T18:13:04.910 回答
2

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

git reset HEAD~1
git stash
(rebasing or whatever other intermediate steps required go here)
git push
git stash pop
于 2012-06-28T18:46:25.993 回答