git版本控制(三):存储、后悔药、游离分支
git存储
有时,在当我们在某个分支上上工作一段时间后,这是突然发现前面的版本有问题,需要修复,这是你需要切换到另一个分支。问题是我不想仅仅因为这一个bug而提交我做了一半的工作,而git stash
恰好解决了这个问题,让我们在不提交的情况下就可以切换分支。如下图所示:
这时我要切换到master
分支上,但是因为wang
这个分支上还有未完成的任务,不允许切换分支,如下图所示:
但是我又不想提交,因为整个功能还没有完成,这是执行git stash
,如下图所示:
完美切换,现在假装我已经在master分支上修复了bug,需要回到原来工作分支的状态,执行以下命令即可:
git checkout wang // 回到之前的分支
git stash apply // 应用之前的存储
在应用了之前的存储之后,我们要记得删除这条存储记录,执行下面的命名:
git stash drop 存储id
然后就可以之前的工作了,完美!
git后悔药
git工作区后悔药
当我们修改了已经被git管理的文件,如下图所示:
如果这时想通过命令撤回修改的话,执行以下命令(上图中有提示):
git restore <file文件名>
git缓存区后悔药
当我们执行git add
之后,如下图所以:
如果这是想撤销缓存区的内容,执行以下命令(上图有提示):
git restore --staged ameng.txt
git版本库后悔药
我们的提交记录是不能被删除的(但是可以使之处在游离状态),如下图所示:
显然,上面的注释不符合要求,执行命令如下:
git commit --amend
出现下面的界面,在这个界面编辑注释即可。
这个命令本质上是先执行了git reset --soft HEAD~
,然后重新提交了一次,移动HEAD并且带着分支一起移动,使错误的提交对象处在游离分支,如下图所示:
更加详细的git reset可参考 git官网
游离分支
当我们切换到指定的某一次提交,HEAD 就会处于「detached」状态,也就是游离状态。
HEAD 游离状态的利弊
好处:HEAD 处于游离状态时,开发者可以很方便地在历史版本之间互相切换,比如要回到某次提交,只需要 对应的 或者 名即可。
弊端:若在该基础上进行了提交,则会新开一个「匿名分支」;也就是说我们的提交是无法可见保存的,一旦切换到别的分支,原游离状态以后的提交就不可追溯了。
比如,现在我有一条master
分支,如下图:
然后我checkout 56c9266
切换到增加wang.txt文件时的状态,如下图:
此时,HEAD就处在一个游离的状态,且有一个游离分支存在,可以通过git branch
查看分支情况,这时当我们修改文件内容并且提交,如下图:
如果现在我们把分支切换到master
分支时,如下图:
从上图可知,在游离分支上的提交以后不可回溯。
如何解决,其实很简单, 在切换到游离状态的时候应该新建一个分支,然后我们所有的操作修改和提交都会保存到该分支,HEAD 也就指向了该分支最新提交的 commit id 处,而不会再处于游离状态。
具体可参考这篇文章,对游离分支有详细的解释。
转载自:https://juejin.cn/post/6930097627589509127