回滚
参考:https://github.com/geeeeeeeeek/git-recipes/wiki/2.6-%E5%9B%9E%E6%BB%9A%E9%94%99%E8%AF%AF%E7%9A%84%E4%BF%AE%E6%94%B9
1. git revert⚓
还原一些现有的提交。
git revert [--[no-]edit] [-n] [-m parent-number] [-s] <commit>...
git revert --continue
git revert --quit
git revert --abort
它是通过搞清楚如何撤销这个提交引入的更改,然后在最后加上一个撤销了更改的新提交,而不是从项目历史中移除这个提交。这避免了Git丢失项目历史。
例子:
[root@dev git-test]# git log --oneline
3c525df test rebase
fdd2dad conflict commit
# 3c525df增加了d6这个文件的内容
[root@dev git-test]# cat d6
test rebase
# 撤销3c525df所做的更改
[root@dev git-test]# git revert 3c525df
[master bdcb3b5] Revert "test rebase"
1 file changed, 1 deletion(-)
# 此时d6没有内容
[root@dev git-test]# cat d6
[root@dev git-test]# git log --oneline
bdcb3b5 Revert "test rebase"
3c525df test rebase
fdd2dad conflict commit
2. git reset⚓
该命令不会重置git未追踪的文件(比如.gitignore中的文件)。
不加--hard
选项时只重设缓冲区;加上该选项时,还会重设工作目录。
git reset
:重设缓冲区,匹配最近的一次提交,但工作目录不变。它会取消 所有 文件的缓存,而不会覆盖任何修改git reset --hard
:重设缓冲区和工作目录,匹配最近的一次提交。git reset <commit>
:将缓存区重设到这个提交,但不改变工作目录。所有<commit>
之后的更改会保留在工作目录中。
3. git clean⚓
删除git未追踪的文件。常与git reset --hard
结合使用。
git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>...
-f
:删除文件必加选项。-n
:不去真正地删除文件,而是告知哪些文件会被删除。-d
:除了未跟踪的文件外,还删除未跟踪的目录。-x
:不使用.gitignore
(每个文件夹下的)和$GIT_DIR/info/exclude
的忽视规则,只使用-e
选项定义的规则来删除文件。-X
:只删除被git忽视的文件。
[root@dev git-test]# git clean -n
Would remove clean-test
[root@dev git-test]# git clean -f
Removing clean-test