修改之前错误的提交(非最新的提交)
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 进行修改
解释:
- 在这个变异页面的最顶部,列出了将要被 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
在修复完成之后,就可以直接用 rebase --continue 来继续 rebase 过程,把后面的 commit 直接应用上去
git rebase --continue
至此,整个修改过程就结束了。
总流程:
- 使用
git rebase -i 目标 commit定位到目标 commit - 在编辑界面指定需要操作的 commits 以及操作类型(pick, edit)
-i 目标 commit` 定位到目标 commit - 在编辑界面指定需要操作的 commits 以及操作类型(pick, edit)
- 操作完成后使用
git rebase --continue来继续 rebase 过程
版权声明:本文为qq_39219279原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。