git checkout 对工作目录的影响 —— Git 学习笔记 21
git checkout 對工作目錄的影響
問題的提出
本文要討論的是:當我們用git checkout <branch_name>命令切換分支時,如果有未提交的修改,會發生什么?
如果當前工作區的狀態是“clean”,那么切換到其他分支是很容易的。但是,如果有未提交的修改,也許就不能順利地切換過去,Git 會給出錯誤信息。例如:
$ git branchbug/pr-1bug/pr-2dev* master$ git checkout deverror: Your local changes to the following files would be overwritten by checkout:NewStuffPlease, commit your changes or stash them before you can switch branches.AbortingGit 提示我們:要么提交所有的修改,要么用 stash 命名把這些修改儲藏起來。
讓人費解的是,Git 也不是每一次都這樣阻止我們切換分支。比如當我們基于活躍分支的最近一次提交創建一個新分支的時候,不管本地有沒有未提交的修改,我們都可以切換到新分支,這又是為何呢?
原理初探
假設你當前在分支 branch1, 你想切換到分支 branch2,于是你輸入命令
git checkout branch2對于你的工作區來說,這條命令意味著什么呢?
上面的每一步都有可能破壞你當前的工作區(工作區和暫存區對于每個分支是共用的)。
對于1,刪除一個文件,如果這個文件在工作區的版本和它在分支1的版本是一致的,那么刪除它就是安全的;如果你修改了它,還沒有提交,那么刪除就是不安全的;
對于2,創建一個文件,如果工作區還不存在這個文件,那就是安全的;如果工作區已經有這個文件,但是內容是“錯”的,那么就不安全;
對于3,如果這個文件已經提交,那么就是安全的;如果被修改了,且沒有提交,那么就不安全;
注意:用命令git checkout -b <newbranch>創建并切換到一個新分支總是“安全”的:沒有文件被創建,也沒有文件被刪除,也沒有文件被更新,索引也沒有任何改變。
但是用git checkout -b <newbranch> <start_point>就不一樣了。Git 會應用上述的安全檢查規則。
參考資料
https://stackoverflow.com/questions/22053757/checkout-another-branch-when-there-are-uncommitted-changes-on-the-current-branch
總結
以上是生活随笔為你收集整理的git checkout 对工作目录的影响 —— Git 学习笔记 21的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 远程仓库与 fetch 命令——Git
- 下一篇: html tab切换jquery,jQu