git rebase - 仅使用一些提交

Ami*_*irW 3 git

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

git fetch origin master
git rebase --merge FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)

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

是否有可能在不必处理提交C的情况下进行rebase.

谢谢

ver*_*nzt 6

在rebase之前保存

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

$ git tag save-commitC <sha1>
Run Code Online (Sandbox Code Playgroud)

没有提交C的重新绑定

保存引用后,没有提交的rebase:

$ git rebase --interactive --merge FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)

它应该打开你的编辑器文件看起来像这样:

pick <sha1> <message>
pick <sha1> <message>
pick <sha1> <message>
...
Run Code Online (Sandbox Code Playgroud)

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

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

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

$ git push origin master
Run Code Online (Sandbox Code Playgroud)

重新申请提交

当您准备在重新分支的分支上应用它时:

$ git cherry-pick save-commitC
   # resolve merge conflicts
$ git commit
$ git tag -d save-commitC
Run Code Online (Sandbox Code Playgroud)

  • 防爆.`git cherry-pick tag~3..tag`会选择`tag`和三个提交.每个提交都包含对其父级的引用,因此对最后一次提交的引用是对其父级的引用.这就是为什么分支名称只不过是对该分支上最后一次提交的引用. (2认同)