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

綜上,說得略囉嗦,如有謬誤,望不吝賜教。但願對您有所幫助。文件

相關文章
相關標籤/搜索