今天碰到这么一种情况,研究了好久也不知道怎么办,比如今天我写了一大堆的功能,分别都已经 commit
了。举个例子,commit
历史大概是这样的:commit message
分别为"1, 2, 3, 4",代表第一次到第四次提交。
假设我每次都是修改的同一个文件 test.md
,在四次提交之后文件内容为:
1
2
3
4
即每次提交增加一行,对应内容为本次提交的commit message
。
然后现在我发现第二次提交有疏忽的地方,需要进行修改。就使用 git rebase -i HEAD~3
进入
交互页面。如下所示,然后把第二次提交前面的的 pick
改成 e
对第二次提交进行修改。
这个时候 test.md
里面的内容是下面这个样子的:
1
2
然后我需要加一些东西比如我在新增一行写上 5
,然后 git add .
, git commit --amend
第二次的 commit
就改好了。然后执行 git rebase --continue
,很显然,因为之前第三行的内容在第三次提交的时候应该是 3
,而这个时候我因为需要补充第二次的提交在第三行新加了一点东西,所以肯定会产生冲突,因此然后必须解决这个冲突才可以执行 git rebase --continue
, 这个时候文件内容是这样的:
1
2
<<<<<<< HEAD
5
=======
3
>>>>>>> 1269f10... 3
但是如果我把冲突解决了。。那么后面的 commit
信息就全部丢失了。。
然后我只能想到一个最笨的办法就是直接退到第二次 commit
那个点,然后把所有的内容重新修改一遍。。
但是要是我第三次和第四次修改的内容特别多。。那就比较麻烦了。
我应该怎么解决这个冲突,才能使在保证后面的 commit
都不丢失的情况下把第二次的 commit
修改成功。。
或者是我的想法错了。。各位大大有没有什么好办法。。跪谢各位大大。。
曾经蜡笔没有小新2017-05-02 09:34:51
后面的commit 应该不会丢失才对,完成merge之后,再次执行git rebase --continue
。
不过你的这种做法个人不太认同,一般没必要去强行更改中间的commit,重新提交一个新的commit就好了。