git 教程 --git reset 命令
![git 教程 --git reset命令](https://static001.geekbang.org/infoq/9f/9f39bb2a475d02d0e89f3f8e8004dc59.jpeg)
简介
在程序员实际工作过程中,提交代码后,偶尔也有后悔的时候,但是都提交到本地仓库或者推送到远程服务器了,可怎么办?我想要回到某一个提交的版本,git 就很贴心的提供了对应的功能,可以让你随心所欲的后悔。虽然世界上没有后悔药,但是 git 可以做到。
git reset 前置知识
使用 git reset 之前,需要对 git 中的区域有一定的了解。git 中的区域划分为工作区(WorkSpace)、暂存区(Stage/Index)、本地库(Local Repo)和远程库(Remote)四个区域。
![](https://static001.geekbang.org/infoq/d0/d0b12be21cd7c59c3f9bb6c8f8d4c8b2.png)
同时 git reset 还需要跟三个参数联合使用,效果更好
--hard
--mixed
--soft
三个指令的区别:对于工作区、暂存区、本地仓库的回滚的粒度范围不一样,可以根据实际的需求选择不同的参数来回滚不同区域的代码。
git reset --hard 指令图解
![](https://static001.geekbang.org/infoq/16/16870dad0cefd7763fa326c54f5fdffc.png)
使用当前的命令,工作区、暂存区、本地仓库都会回滚到对应 commit-id 上
git reset --mixed 指令图解
![](https://static001.geekbang.org/infoq/55/55bfb08d7c8ae166a059e70d59b82b88.png)
使用当前的命令,工作区代码不会受到影响,但是暂存区、本地仓库区的代码已经回滚到了 YY 对应的 commit-id 上。
git reset --soft 指令图解
![](https://static001.geekbang.org/infoq/f4/f48d3ac3e800c70fa4b59b5afe64fb9e.png)
使用当前的指令,工作区和暂存区的代码不会受到影响,但是本地仓库的代码会回滚到 YY 对应的 commit-id 上
总结
对于--hard,--mixed,--soft 参数,可以根据具体情况使用,区别就是 git 中工作区、暂存区、本地仓库是否会受到影响。根据上文可以看出,他们三个对于 git 区域的影响范围一次递减。如果有良好的 add,commit 的习惯(根据工作进度及时 commit,不要所有的东西一次性梭哈)建议使用--hard 模式,但是同时可以跟其它的指令综合使用,比如
版权声明: 本文为 InfoQ 作者【生之欢愉,时间同行】的原创文章。
原文链接:【http://xie.infoq.cn/article/85ccd06952b10af573bb76132】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论