2010-03-26 49 views
1

我有一個叫做實驗的分支。git checkout實驗有時可以使用,有時候不會,如果我有本地更改

git checkout master 
echo 'some changes' > a.txt 
# now master branch has local changes which are not committed 
git checkout experiment 

有時我注意到,如果我有本地更改,我不允許切換到另一個分支。如果我有本地更改,有時候我可以切換到另一個分支。

我錯過了什麼?

+0

請重新設置shell命令的格式(使用代碼格式),並且不要使用它們不明確的別名... – 2010-03-26 14:37:48

+0

同意格式化。我的錯。關於使用git checkout vs git co。我仍然在圍牆上。 – 2010-03-26 15:15:23

+0

@dorelal:是的,我們都可以弄清楚你的意思是從上下文結算。但在提問時使用個人自定義,這絕對是不明確的。 (在這種情況下,情況更糟,因爲'co'也可能意味着'提交') – Cascabel 2010-03-26 20:25:24

回答

4

從git的結帳手冊頁的摘錄:

當切換分支,如果你有本地修改到一個或多個在當前分支和您要切換到的分支之間不同的文件,命令拒絕切換分支以便在上下文中保留您的修改。

所以,如果修改與分支之間的差異沒有任何關係(如你的例子),它會讓你切換。如果分支之間的差異修改了相同的文件,它會拒絕 - 但您可以指定-m選項以使其在當前分支,工作樹和新分支之間執行三向合併(這就是該代碼段的位置)來自)。

爲了使描述更完整一些:假設主和實驗之間的差異只在文件A,B和C中進行。如果在工作樹中修改了A,則無法檢出另一個科。但是,如果您修改D,則可以檢查出來。

+0

此外,如果您將D添加到'master'而不添加到'dev',那麼即使您對D進行本地更改,也可能允許您切換到開發,但是當您切換回主控時,它會拒絕(我錯了?) – hasen 2010-03-26 14:54:32

+0

@hasen:我認爲它不會讓你這麼做 - 作爲切換到dev的一部分,它想要刪除該文件,但它不能,因爲有修改。 – Cascabel 2010-03-26 15:10:26

+0

我有文件a.txt和b.txt在主和實驗分支。我在主人並編輯a.txt。現在,master已經在a.txt中取消了本地更改,並且我可以進行git co實驗。 – 2010-03-26 15:26:58

0

我不太確定git是如何做到這一點的,但它會試圖阻止你意外地覆蓋未提交的更改。如果它決定你能得到一個衝突也不會允許的話,我想......

+0

這不僅僅是發生衝突,它必須在任何文件上執行合併。 – Cascabel 2010-03-26 14:43:37

+0

啊,我想我明白你的意思了 - 不得不合並給定的文件會產生衝突的可能性。我認爲,這個決定的理念更多的是確保你的差異的含義不會改變 - 這句話「你在修改上下文中的修改」是關鍵。 – Cascabel 2010-03-26 14:48:29

相關問題