git 切換本地分支時,把當前分支修改的內容帶到了下個分支中去

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中去了

分析
  1. 什麼場景下會出現
    小明原本只有A分支,後來git checkout -b B生成了一個B分支;
    小明的A和B分支都從遠程分支master下拉了一次版本,現在本地2個分支的版本完全一樣

  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標誌是什麼意思

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章