面向工资编程,面向面试学习!

撤消操作

有时候你可能操作错了,想撤销某些操作。 这里我们将会学习几个撤消修改的基本工具。 有些撤消操作是不可逆的,一定要小心使用。

重新提交 commit

如果你提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 你可以在 commit 时使用 --amend 选项的提交命令尝试重新提交:

git commit --amend

这个命令会将暂存区中的文件提交,如果从上次提交以来没做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。
文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。

如果发现忘记暂存了某些修改到暂存区,可以这么做:

git commit -m 'git amend message'
git add file
git commit --amend

最终只会有一个提交——第二次提交将代替第一次提交的结果。

取消暂存的文件

我们在 git_tutorial 项目下创建两个文件:git_commit.html、git_log.html,两个文件的内容如下:

git_commit.html

git_log.html

把他们添加到暂存区,然后使用 git status 查看状态信息,

git add .
git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        new file:   git_commit.html
        new file:   git_log.html

此时我们想把 git_log.html 单独提交该怎么做呢,我们注意到提示信息中使用 git reset HEAD 来取消暂存,我们使用这个命令操作下:

git reset HEAD git_log.html
git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        new file:   git_commit.html

Untracked files:
  (use "git add ..." to include in what will be committed)

        git_log.html
git commit -m "git commit"
git add git_log.html
git commit -m "git log"

git_log.html 文件已经是未暂存的状态了。git reset 可以加上 --hard 参数,加了参数 --hard 会直接把工作区的内容擦除,不加--hard的时候只是操作了暂存区。

撤消对文件的修改

假如我们修改了某个文件,但是想恢复原状怎么办?先修改下READE文件,然后运行 git status:

echo '123' >> README
git status
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:   README

我们注意到提示信息中使用 git checkout -- 来忽略工作区的修改,我们运行下这个命令:

git checkout -- README
git status
On branch master
nothing to commit, working tree clean

可以看到 README 文件的修改已经被撤消了。
在 Git 中任何 已提交的 东西几乎总是可以恢复的。 甚至那些被删除的分支中的提交或使用 --amend 选项覆盖的提交也可以恢复。 但是未提交的东西丢失后很可能再也找不到了。