(掌握)git reset、git revert和git checkout有什么区别?
命令 | 作用域 | 常用情景 |
---|---|---|
git reset | 提交层面 | 在私有分支上舍弃一些没有提交的更改 |
git reset | 文件层面 | 将文件从缓存区中移除 |
git checkout | 提交层面 | 切换分支或查看旧版本 |
git checkout | 文件层面 | 舍弃工作目录中的更改 |
git revert | 提交层面 | 在公共分支上回滚更改 |
#提交层面的操作
-
reset 在提交层面上,reset将一个分支的末端指向另一个提交。这可以用来移除当前分支的一些提交。例如回退了两个提交。
git reset HEAD~2
-
Revert撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中。
git revert HEAD~2
相比
git reset
,它不会改变现在的提交历史。因此,git revert
可以用在公共分支上,git reset
应该用在私有分支上。你也可以把
git revert
当作撤销已经提交的更改,而git reset HEAD
用来撤销没有提交的更改。
#(掌握)一、git pull
和 git fetch
之间有什么区别?
git pull
:相当于是从远程获取最新版本并merge到本地git fetch
:相当于是从远程获取最新版本到本地,不会自动merge
简单来说,git pull
是 git fetch
+ git merge
。