git commit -amend


git commit --amend 命令是修复最新提交的便捷方式。它允许你将缓存的修改和之前的提交合并到一起,而不是提交一个全新的快照。它还可以用来简单地编辑上一次提交的信息而不改变快照。

示例

# 编辑 hello.py 和 main.py
git add hello.py
git commit

# 意识到你忘记添加 main.py 的更改
git add main.py
git commit --amend --no-edit

编辑器会弹出上一次提交的信息,加入 --no-edit 标记会修复提交但不修改提交信息。需要的话你可以修改,不然的话就像往常一样保存并关闭文件。完整的提交会替换之前不完整的提交,看上去就像我们在同一个快照中提交了 hello.py 和 main.py。

类似于 git reset ,--amend 标记只应该用于由于仓促提交造成的小意外,如忘记缓存某个文件或者搞错了提交的信息,但是永远不要用于修复已经推送到公共仓库的提交。

rebase


rebase 是将分支移到一个新的基提交的过程。过程一般如下所示:

从内容的角度来看,rebase 只不过是将分支从一个提交移到了另一个。但从内部机制来看,Git 是通过在选定的基上创建新提交来完成这件事的——它事实上重写了你的项目历史。理解这一点很重要,尽管分支看上去是一样的,但它包含了全新的提交。

rebase 的主要目的是为了保持一个线性的项目历史,说大白话就是让整个 git commit 历史变得“好看”,但是永远不应该 rebase 那些已经推送到公共仓库的提交。rebase 会用新的提交替换旧的提交,你的项目历史会像突然消失了一样。

示例