轉載網址:
https://blog.csdn.net/weixin_34114823/article/details/92254904
接觸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步中所說。
綜上,說得略啰嗦,若有謬誤,望不吝賜教。希望對您有所幫助。
轉載於:https://my.oschina.net/u/2364025/blog/1841269