Git 修改之前错误的提交(非最新的提交)( 8)

修改之前错误的提交(非最新的提交)

commit --amend 可以修复最新 commit 的错误,但是如果倒数第二个 commit 写错了,就要用到 rebase -i(交互式 rebase)命令了

git rebase -i:交互式 rebase

rebase -i 是 rebase --interactive 的缩写形式,意为交互式 rebase

如果是在写错 commit 之后,又提交了一次才发现之前写错了,那么这时候使用 commit --amend 已经晚了,但是可以使用 rebase -i

git rebase -i HEAD^^

解释:

  • 在 git 中有两种偏移符号:^ 和 ~
  • ^ 代表把 commit 往前偏移,偏移的数量是 ^ 的数量。HEAD^^ 表示 HEAD 所指向的 commit 往前数两个 commit
  • ~ 代表把 commit 往回偏移,偏移的数量是 ~ 后面的数。例如 HEAD~5表示 HEAD 指向的 commit 往后数 5 个 commit
  • 上面的这行代码表示,把当前 commit (HEAD 所指向的 commit ) rebase 到 HEAD 之前 2个的 commit 上

编辑界面

在输入上述指令之后,git 会进入一个编辑页面,可以让你选择对那个 commit 进行修改

eGlf5F.png

eGQuWj.png

解释:

  • 在这个变异页面的最顶部,列出了将要被 rebase 的所有 commit,也就是倒数第二个 commit 和最新的 commit,而且这个顺序是正序排列的,就是说旧的 commit 在前面,新的 commit 在后面
  • 最上面两个显示了两个信息: commit 信息和对 commit 可以进行的操作(pick)
  • pick 的意思是直接应用这个 commit。edit 的意思是应用这个 commit, 然后停下来等待继续修正

经过上面的操作之后,就可以修改写错的内容了(此时文件的状态就是当时 commit 操作的状态,没有后面 commit 的影响)。修改完成之后,先把文件 add ,然后 commit --amend 进行修改。

git add shopping.txt.txt
git commit --amend

eG11aT.png

在修复完成之后,就可以直接用 rebase --continue 来继续 rebase 过程,把后面的 commit 直接应用上去

git rebase --continue

eG1tz9.png

至此,整个修改过程就结束了。

总流程:

  1. 使用 git rebase -i 目标 commit 定位到目标 commit
  2. 在编辑界面指定需要操作的 commits 以及操作类型(pick, edit)
    -i 目标 commit` 定位到目标 commit
  3. 在编辑界面指定需要操作的 commits 以及操作类型(pick, edit)
  4. 操作完成后使用 git rebase --continue 来继续 rebase 过程

版权声明:本文为qq_39219279原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。