使用git rebase -i 去合并一个区见范围的时候,范围外的节点也被合并了

新手上路,请多包涵

如下,分别创建四个文件,并且add和commit

git init

touch a.txt
git add a.txt
git commit -m "a"

touch b.txt
git add b.txt
git commit -m "b"

touch c.txt
git add c.txt
git commit -m "c"

touch d.txt
git add d.txt
git commit -m "d"

这个时候,已经有了四个提交,我想要合并b和c,如下所示

clipboard.png

于是乎,我是用了如下指令

git rebase -i 8426f802623d9fee7bb0b3af228c8b014a033caf 90628f495f62961f3083644c31b9a4cf29f08130

并将c节点的状态由pick改成了squash,以让它和前一个节点合并在一起

clipboard.png
然后wq后,修改了comment

clipboard.png
git log 查看一下, 最后提交的d节点也没了

clipboard.png

阅读 4.1k
2 个回答

没有合并d,你看下当前的文件没有d。rebase基于a那次提交新建了提交,只不过这次提交添加了b和c。d那次提交依然存在,你可以用commit号切换过去。


如果你只是想把b和c合并,d仍然接在后面,可以

git rebase -i 8426f802623d9fee7bb0b3af228c8b014a033caf

然后只squash c那次提交,表示把c合并到b那次提交,保留pick d
接着会提示你输入新的message作为b&c的合并。

@phantasyslayer 说的对

简单来说就是 rebase不是让你选择从哪次到哪次进行合并的!
你只要选择到你要合并的那次的上一次.
然后在commit的时候 把合并的改成 f 或者 s
其他不想改的 放着别动就行(比如的你的 d 提交)

bc合并 d别动

clipboard.png

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题