我做了几个提交,比如说提交A、B、C。现在我只想把提交A和B推送到远程仓库。(并将提交C保留以便在稍后合并和推送) 在推送之前,我需要运行以下命令:
git fetch origin master
git rebase --merge FETCH_HEAD
问题是上述命令会要求我解决提交C的冲突,但我现在不打算推送它。
是否可以在不处理提交C的情况下进行变基?
谢谢
我做了几个提交,比如说提交A、B、C。现在我只想把提交A和B推送到远程仓库。(并将提交C保留以便在稍后合并和推送) 在推送之前,我需要运行以下命令:
git fetch origin master
git rebase --merge FETCH_HEAD
问题是上述命令会要求我解决提交C的冲突,但我现在不打算推送它。
是否可以在不处理提交C的情况下进行变基?
谢谢
为了推迟解决冲突,保存提交的最简单方法是将其打上标签,这样您以后就可以引用该提交:
$ git tag save-commitC <sha1>
在保存了一个引用后,进行不包含提交 C 的变基:
$ git rebase --interactive --merge FETCH_HEAD
pick <sha1> <message>
pick <sha1> <message>
pick <sha1> <message>
...
FETCH_HEAD
的祖先的第一个提交。$ git push origin master
当你准备在变基后的分支上应用它时:
$ git cherry-pick save-commitC
# resolve merge conflicts
$ git commit
$ git tag -d save-commitC
git reset HEAD~1
git stash
(rebasing or whatever other intermediate steps required go here)
git push
git stash pop
git tag save-commitX <sha1>
(您无法一次创建多个标签),但稍后您可以一次性选择所有的标签:git cherry-pick save-commitC save-commitD
。另一种方式是仅在您进行的最后一个提交 (D
) 上打标签,然后稍后您可以执行git cherry-pick save-commitD~1 save-commitD
来选择D
和其父级。 - vergenztgit cherry-pick tag~3..tag
会挑选出tag
和它之前的三个提交。每个提交都包含其父提交的引用,因此对最后一个提交的引用也就是对其父提交的引用。这就是为什么分支名称实际上只是对该分支上最后一个提交的引用。 - vergenzt