Undo Commit,Revert Commit,Drop Commit区别
Undo Commit(撤销提交)(本地代码不会被删除)
适用情况:
- 代码修改完了,已经Commit了,但是还未push,然后发现还有地方需要修改,
- 但是又不想增加一个新的Commit记录。
- 这时可以进行Undo Commit,修改后再重新Commit。
- 如果已经进行了Push,如果进行Undo Commit,本地Commit记录不会存在,但是线上的Commit记录还是会存在的。
特点:
- 只能用于最近的一次提交。如果已经有了后续提交,或者已经 Push 到了远程公共分支,则不建议或无法直接用它。
- 代码不丢失:它只撤销了“提交”这个动作,你写代码的改动(Changes)会完好地保留在本地工作区或暂存区中。
- 历史被擦除:Git 日志中会抹去最后那一次的 Commit 记录
Revert Commit (还原提交) (本地代码会被删除)
适用情况: 代码修改完了,已经Commit了,已经push,然后发现本次提交不能提交。
特点:
- 适用于任何历史记录:不管是第几次的 Commit、还是已经 Push 到远程共享仓库的 Commit 都可以使用。
- 不破坏历史:它不会删除或修改原有的提交记录,而是新增一条反向操作的
Commit,把代码恢复到没修改之前的状态。这样最安全,不会影响其他协同开发者的远程分支历史。 - 代码会被抹掉:当前这次提交所做的修改会被抵消掉(还原)。
Drop Commit (丢弃提交) (本地代码会被删除)
适用情况:
1 | 未push的Commit记录: 会删除Commit记录,同时Commit中对代码进行的修改也会全部被删除。 |
本质:在 Git 的交互式变基(git rebase -i)中删除某一行记录。
特点:
- 操作任意历史:在 IDEA 的 Git Log 中右键点击某个 Commit 可以找到(通常用于未 Push 的本地多条记录)。
- 彻底删除:它会直接从提交历史中把这个 Commit 抹掉,同时丢弃该 Commit 对应的代码修改。
- 风险:如果改动已经 Push 到远程,使用它强行变基会污染或破坏公共历史,通常仅限于本地整理 Commit 时使用。
总结
| 是否删除对代码的修改 | 是否删除Commit记录 | 是否会新增Commit记录 | |
|---|---|---|---|
| Undo Commit | 不会 | 未Push会,已Push不会 | 不会 |
| Revert Commit | 会 | 不会 | 会 |
| Drop Commit | 会 | 未Push会,已Push不会 | 不会 |