git之 分支切换时还没有commit的文件的相互影响问题

接触git有一小段时间,期间有过很多疑问,幸得看了不少大神博客,收获颇丰。本身也写点东西,算是免得之后本身忘啦,若是一样有人从零开始,但愿本篇博客能够略有帮助。git

本篇博客主要讲git使用过程当中,本地仓库分支(branch)切换过程当中的影响。内容很少,但由于本身也是菜鸟明白那种心情,会写的详细(啰嗦)一点,望包涵。缓存

git下分支的应用是很方便的一个功能,可是有一个问题,若是我在分支A有工做还没有完成,想要跳到分支B,若是不注意,可能搞乱你的工做。图片

首先说,若是你的分支分支A工做区和缓存区是干净的(即你在A分支commit以后再没作任何更改),你随便往别的分支跳都不会有影响的。可是若是你在A分支下有未完成的工做,即你用git status看显示有没有add或者commit的内容,你往B分支checkout的时候,会把你在A分支下的工做带过去,如图: 博客

这里写图片描述

在命令$git checkout B以后显示的A A1 和A A2意思即为提醒使用者,有未提交的工做也一块儿跳转到分支B上啦(前面的大写A意味着A1,A2文件是新建且已经git add的文件;若是是大写M则意味着A1,A2文件为内容有更改的原有文件;D则意味着是删除了A1,A2文件)。这个时候你若是在B分支上进行其余工做而不编辑A1,A2文件,目前来讲是没问题的。然而,一旦你在B分支上完成了某项工做,运行了commit命令,A1,A2文件以前的更改也会在A分支上进行提交,而git的规矩是,在那个分支上进行的提交,就算哪一个分支上的工做。it

也就是说,一旦你把A分支上还没有完成的工做带到了B分支上并在B分支上顺利提交,那么你原本但愿是在A分支上进行的工做,则会被提交到本地库中B分支上,该部分工做在A分支下用git log命令查看不到可是在B分支下则能够查看到。这在实际的工做中会致使你的两个分支乱掉或者出现提交冲突。不是不能补救,可是会很麻烦,因此要尽可能避免。百度

那么怎么避免呢?事实上,在比较旧的版本的git下,你在分支A下有未完成的工做的情形下,是没法跳转到分支B下的,这就很好的避免了后续的尴尬状况,不过目前版本的git是容许你带着未完成工做进行跳转的,因此你能够经过如下手段来避免这种状况下搞乱你的工做:im

1.跳转分支以前git status一下查看是否是有没有add和commit的工做,若是有,能够的话,就都提交掉。(事实上还没有add的工做带到了新分支下若是不继续对该文件进行处理,带过去也是没有影响的,大不了跳回来再带回来嘛,反正木有add过的内容在新分支下commit也不会把这部分工做提交。) 
2.若是确实有还没有add和commit的工做,可是并未完成不方便进行提交,能够利用git stash进行现场保留,而后跳转。(git stash的用法也是一块比较重要的内容,这里暂不详细介绍了,能够直接百度其用法~) 
3.若是1.2你都没有作,很不当心地带着未commit的工做跳转到了另外一分支下,跳转以后的提示可让你意识到你把先前分支的工做带过来了,不作任何修改直接再跳回去就好(就又带回去了),而后进行1或2步中所说。img

综上,说得略啰嗦,如有谬误,望不吝赐教。但愿对您有所帮助。文件

相关文章
相关标签/搜索