1. 程式人生 > >git之 分支切換時相互影響的問題

git之 分支切換時相互影響的問題

git之 分支切換時相互影響的問題

2016年12月05日 16:32:15

閱讀數:9086

接觸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的規矩是,在那個分支上進行的提交,就算哪個分支上的工作。

也就是說,一旦你把A分支上尚未完成的工作帶到了B分支上並在B分支上順利提交,那麼你本來希望是在A分支上進行的工作,則會被提交到本地庫中B分支上,該部分工作在A分支下用git log命令檢視不到但是在B分支下則可以檢視到。這在實際的工作中會導致你的兩個分支亂掉或者出現提交衝突。不是不能補救,但是會很麻煩,所以要儘量避免。

那麼怎麼避免呢?事實上,在比較舊的版本的git下,你在分支A下有未完成的工作的情形下,是無法跳轉到分支B下的,這就很好的避免了後續的尷尬情況,不過目前版本的git是允許你帶著未完成工作進行跳轉的,所以你可以通過以下手段來避免這種情況下搞亂你的工作:

1.跳轉分支之前git status一下檢視是不是有沒有add和commit的工作,如果有,可以的話,就都提交掉。(事實上尚未add的工作帶到了新分支下如果不繼續對該檔案進行處理,帶過去也是沒有影響的,大不了跳回來再帶回來嘛,反正木有add過的內容在新分支下commit也不會把這部分工作提交。) 
2.如果確實有尚未add和commit的工作,但是並未完成不方便進行提交,可以利用git stash進行現場保留,然後跳轉。(git stash的用法也是一塊比較重要的內容,這裡暫不詳細介紹了,可以直接百度其用法~) 
3.如果1.2你都沒有做,很不小心地帶著未commit的工作跳轉到了另一分支下,跳轉之後的提示可以讓你意識到你把先前分支的工作帶過來了,不做任何修改直接再跳回去就好(就又帶回去了),然後進行1或2步中所說。

綜上,說得略囉嗦,若有謬誤,望不吝賜教。希望對您有所幫助。