管理 Git 提交

内容纲要

查看【Git】专题可浏览更多内容

修改最后一次提交

有的时候提交完了才发现少提交了某个文件,或是提交信息写错了,这时候再进行一次类似的提交就会让提交信息变得很难看。

这时候可以使用 --amend 选项,就相当于用一个新的提交来替换掉之前的最后一次。

⚠️ 注意,使用这个技巧的时候需要小心,因为修正会改变提交的 SHA-1 校验和。 它类似于一个小的「变基」,要注意两点:

  1. 只能用它修正上一次提交;
  2. 不要对一个已经在远程仓库上的提交进行操作,因为团队的其他成员可能已经获得了你的这次提交并且在此基础上进行了改动;

漏提交了文件

# 添加漏提交的文件
git add <文件名>

# --no-edit 表示不需要编辑提交信息
git commit --amend --no-edit

如果提交信息并没有写错,只是少提交了文件,那么可以使用 --no-edit 选项跳过修改提交信息。

提交信息写错了

如果是提交信息写错了:

$ git commit --amend

这时候会进入到另一个界面,主要是修改提交信息,如果你从未使用过,简单来说是这样:

  1. I 键进入「插入模式」,以修改提交信息;
  2. 修改完后按 Ctrl + C 键然后输入::wq 保存并退出即可。

将指定提交复制到指定分支

想要在一个分支上选择特定的提交,并将提交副本复制到另一个分支,可以使用 git cherry-pick 命令。

例如我想要将 fix 分支上的一些特定提交复制到 dev 分支,而不是合并分支,我可以先使用 git log fix 查看想要复制的那几个提交的 Commit ID,然后使用 git cherry-pick 命令:

# 切换到要集成提交的分支
git swtich dev

# 复制指定 Commit ID
git cherry-pick 00b44e4

# 如果是多个 ID
git cherry-pick 00b44e4 b135951

# 如果是连续多个 ID
git cherry-pick 00b44e4..b135951
# 但注意上述的 00b44e4 并不会包含其中,如果需要则加上 ^,如
git cherry-pick 00b44e4^..b135951

调整提交的顺序

# -i 等同 --interactive
# 修改最近 3 次提交
git rebase -i HEAD~3
pick 2e79a63 添加了C
pick 373872c 添加了A
pick fe356b5 添加了B

使用 --interactive 后弹出一个交互界面,一般来说可以使用 VIM 编辑器的命令操作

如上示例,比如我想将「fe356b5 添加了B」向上移动一位,那么可以将光标移动至第二行,然后按下 ddp

删除指定提交

# -i 等同 --interactive
# 修改最近 3 次提交
git rebase -i HEAD~3
pick 2e79a63 添加了C
pick 373872c 添加了A
pick fe356b5 添加了B

将不要的提交的 pick 修改为 drop 即可

修改指定提交

那么结合一下修改最后一次提交和修改提交顺序,可以做到什么呢?

比如当前的提交是这样的:

git log
2e79a63 添加了C
fe356b5 添加了B
373872c 添加了A

当前最新的提交已经是 C 了,但我突然想改 A,那么可以先使用 git rebase 调整其顺序,然后 使用 git commit --amend 命令修改提交:

# 先调整顺序将 A 移动到最新
git rebase -i HEAD~3

# 然后进行调整
git add .
# 然后修改当前的最新提交,也就是 A
git commit --amend

# 然后再将 A 移动回去
git rebase -i HEAD~3