1)场景:上一次的提交存在问题:遗漏了文件,或者-m 信息写错了。
$ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend
如果没有做任何修改直接 –amend 则只修改提交信息
$ git commit --amend -m '修改的信息'
取消暂存的文件
2)场景:修改了两个文件,计划分别提交。但是意外输入了 git add . 存入了暂存区。
On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: f2.py modified: f4.p $ git reset HEAD f2.py $ git reset -- f2.py (仅仅修改暂存区,工作目录不受影响)
这个操作本质上说,就是从版本库恢复暂存区,因此刚刚 add . 就被取消了。
调用时加上 –hard 选项可以令 git reset 成为一个危险的命令(可能导致工作目录中所有当前进度丢失!)不加选项地调用 git reset 并不危险 — 它只会修改暂存区域。–hard 已经跟踪的文件将会被覆盖。(未跟踪不会被覆盖,但依然危险) 暂存区 和工作目录都会被修改。记住:未提交的东西,都无法被恢复,只要是提交过,都有可能被恢复。
3)场景:撤销工作目录刚刚 做过的修改。(针对已经跟踪的文件,不会删除和调整未跟踪文件)
On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: f2.py
$ git checkout – f2.py 即可。 将会从暂存区 恢复工作目录。
如果 修改1 添加到了暂存区 工作目录又进行了 修改2
$ git checkout HEAD f2.py 将会从版本库 同时恢复暂存区 和工作目录。
如果你仍然想保留对那个文件做出的修改,但是现在仍然需要撤消,我们将会在 Git 分支 介绍保存进度与分支;这些通常是更好的做法。 (分支要解决的问题)