本文作者:
marklai(赖泽浩)- 高级软件工程师,十年软件配置管理经验,现服务于 CSIG 云与智慧产业事业群质量部
导语
Git 是一个灵活和强大的版本管理工具,正确使用能够有效促进团队协作,防止版本丢失。然而实践中,有些开发人员会或有意或无意地误用部分 Git 的功能,给团队带来困扰,甚至造成损失。不恰当的代码回滚操作是其中的主要问题之一。
本文主要分享针对不同场景的代码回滚操作,以及如何抢救误删的内容。
一个典型案例
我们先通过一个项目团队真实出现过的典型案例,来看看不恰当的代码回滚可能带来的问题。
(1)小红、小黄、小蓝共同工作在同一条分支上。
(2)小红利用reset
回滚了一些内容,发现 push 失败,最后用 push -f
操作成功。
更甚者,push -f
提示目标是保护分支(例如master
)而无法推送成功,于是小红取消了分支保护,从而使得push -f
成功。
(3)小黄小蓝进行常规 git pull,遇到了一大堆冲突,并且 commit 历史都乱了!
(4)过一段时间,需要查看某次发布的源代码,却发现无法找到准确的代码!原来它刚好被小红之前reset
掉了。
认识 Git 的四个工作区域
在盘点常见的代码回滚场景之前,有必要认识一下 Git 的四个工作区域。
平常我们 clone 一个代码库之后,本地看起来就是一个包含所有项目文件的目录。其实从逻辑上可以分为四个工作区域:
-
工作区
也称工作目录、工作副本,简单来说就是 clone 后我们看到的包含项目文件的目录。我们日常开发操作也是在工作区中进行的。 -
本地仓库(.git)
在工作区中有个隐藏目录.git
,这就是 Git 本地仓库的数据库。工作区中的项目文件实际上就是从这里签出(checkout)而得到的,修改后的内容最终提交后记录到本地仓库中。
Tips:不要手动修改 .git 目录的内容 -
暂存区
也称缓存区,逻辑上处于工作区和本地仓库之间,主要作用是标记修改内容,暂存区里的内容默认将在下一次提交时记录到本地仓库中。 -
远端仓库
团队协作往往需要指定远端仓库(一般是一个,也可以有多个),团队成员通过跟远端仓库交互来实现团队协作。