Git 回滚

Git回滚这种操作肯定经常会遇到,记录一下经常常用回滚:

修改最后一次提交的标注信息

有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 –amend 选项重新提交:

1
$ git commit --amend

命令之后会打开一个编辑器,就可以修改里面的信息然后保存,提交。

如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 –amend 提交:

1
2
3
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

取消已经暂存的文件

在使用 git add .之后,发现其中一个文件不需要暂存,这是使用 git status就可以看到:

1
2
3
4
5
6
7
8
$ git add .
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README.txt
modified: benchmarks.rb

可以使用git reset HEAD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ git reset HEAD benchmarks.rb
Unstaged changes after reset:
M benchmarks.rb
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README.txt
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: benchmarks.rb

现在 benchmarks.rb 文件又回到了之前已修改未暂存的状态。

取消对文件的修改

如果决定对一个文件的修改没有必要,同样使用git status可以看到方法:

1
2
3
4
5
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: benchmarks.rb

接着使用:

1
2
3
4
5
6
7
$ git checkout -- benchmarks.rb
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README.txt

此方法是不可逆的,请慎用!!!

记住,任何已经提交到 Git 的都可以被恢复。即便在已经删除的分支中的提交,或者用 –amend 重新改写的提交,都可以被恢复。所以你可能丢失的数据仅限未提交的信息。

分享到: