git 切換本地分支時,把當前分支修改的內容帶到了下個分支中去
- 舉個梨子,首選小明擁有2個本地分支
A和B
,2個分支中都有test.txt文件,小明在A
分支中修改了test.txt
文件的內容,git checkout B
後,
命令行提示
jack@jack-copumter:~/workspaces$ git checkout B
M text
Switched to branch 'B'
-
如果是小白請看這個,不是請跳過
在使用git checkout , git status,或git diff files時會出現奇怪的標誌。如M,T,D,A,R,U等等。
A: 增加的文件.
C: 文件的一個新拷貝.
D: 刪除的一個文件.
M: 文件的內容或者mode被修改了.
R: 文件名被修改了。
T: 文件的類型被修改了。
U: 文件沒有被合併(你需要完成合並才能進行提交)
X: 未知狀態。(很可能是遇到git的bug了,你可以向git提交bug report)
在git diff-files的手冊man git diff-files中可以查到這些標誌的說明。 -
最後大家就看到了自己在
A
分支修改的test.txt的內容,就跑到了B
中去了
分析
-
什麼場景下會出現
小明原本只有A
分支,後來git checkout -b B
生成了一個B
分支;
小明的A和B
分支都從遠程分支master下拉了一次版本,現在本地2個分支的版本完全一樣
-
原因是什麼
我想現在大家已經知道關鍵問題在哪裏了吧,就是2個分支的版本完全一樣,原來git checkout
切換分支的時候,會對比當前分支的md5值,查看md5值用git log
jack@jack-copumter:~/workspaces$ git log commit d39c07fa258ab0e82cf9bab19643a390e1670ce6 (tag: v1.1.0, origin/pre, pre) Author: jack <10*****[email protected]> Date: Tue Nov 13 19:28:16 2018 +0800 1.優化用戶認證更新和修改個人資料
當2個分支的md5值一樣的時候,
git check
就會帶着你的修改去寧外一個分支,
解惑
-
有些小夥伴可能會問了,爲啥我
git checkout
它就提示jack@jack-copumter:~/workspaces$ git checkout pre error: Your local changes to the following files would be overwritten by checkout: src/app/api/api.go Please commit your changes or stash them before you switch branches. Aborting
還是我剛剛說的,你們的md5值不一樣,實際上md5值就是git的版本號,你可以去查看你的2個分支肯定不在同一個版本上.
-
一些特殊情況,你切換的分支名和你的文件名一樣,比如你有一個分支叫
test
剛好有一個文件叫test
,那麼你git checkout test
實際上是操作了文件
參考鏈接:
Git 的M,T,D,A,U標誌是什麼意思