======撤消操作====== 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 ..." 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 ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: f2.py $ git checkout -- f2.py 即可。 将会从暂存区 恢复工作目录。 如果 修改1 添加到了暂存区 工作目录又进行了 修改2 \\ $ git checkout HEAD f2.py 将会从版本库 同时恢复暂存区 和工作目录。 如果你仍然想保留对那个文件做出的修改,但是现在仍然需要撤消,我们将会在 Git 分支 介绍保存进度与分支;这些通常是更好的做法。 (分支要解决的问题)