搜索

首页  >  问答  >  正文

前端 - 关于用 git rebase -i HEAD 修改之前某一次已经 commit 的代码

今天碰到这么一种情况,研究了好久也不知道怎么办,比如今天我写了一大堆的功能,分别都已经 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 修改成功。。
或者是我的想法错了。。各位大大有没有什么好办法。。跪谢各位大大。。

漂亮男人漂亮男人2794 天前639

全部回复(1)我来回复

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-02 09:34:51

    1. 后面的commit 应该不会丢失才对,完成merge之后,再次执行git rebase --continue

    2. 不过你的这种做法个人不太认同,一般没必要去强行更改中间的commit,重新提交一个新的commit就好了。

    回复
    0
  • 取消回复