2011-07-01 61 views
5

我以爲我已經對Git有了一個體面的把握,但剛纔我一直很驚訝。我認爲分支機構會隔離其他分支機構的變化,所以我開始在一個新分支機構進行大型實驗性重構。這個重構意味着移動很多文件。當我切換到主人時,我仍然可以看到變化!Git:分支應該隔離變化,還是不應該?

我去了我的沙箱庫複製的問題:

$ git branch crazy-refactoring 
$ git checkout crazy-refactoring 
$ rm README 
$ git checkout master 
$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add/rm <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  deleted: README 
# 
no changes added to commit (use "git add" and/or "git commit -a") 
$ ls README 
ls: cannot access README: No such file or directory 

爲什麼?我創建一個分支的關鍵在於,我可以嘗試一些東西,如果不成功,就把它扔掉。 Toughts?

+3

您沒有提交刪除。只有承諾的變更是「孤立的」。 –

+1

你是對的,在提交README之後,在瘋狂重構分支中,它重新出現在master分支中。也許我錯過了一些東西,但是在我看來,這是一種奇怪的和不受歡迎的行爲。 – stivlo

+0

它首先讓我感動,但現在我總是依靠這種行爲,當我對一個分支做了一堆更改並決定將它放在一個單獨的分支上以備後用。 – butter71

回答

6

您沒有提交刪除。只有承諾的變更是「孤立的」。

關於你的評論:

也許我失去了一些東西,但在我看來,一個奇怪和令人不快的行爲。

想想看:

您在crazy-refactoring刪除README但沒有提交更改。 Git知道你改變了這個文件,而你沒有提交它。爲了保留您的更改,如果您簽出另一個分支,它不會覆蓋它們。
否則Git無法知道當您切換回到您進行更改的分支時發生了什麼變化。它們會丟失,而且這比在其他分支中看到更改更糟糕。

您當前的工作目錄始終是當前分支+未提交的更改(除非您重置它們)。

當然,Git可能會在檢查出另一個分支時發出警告,表明您有未提交的更改,但有時希望將更改切換到另一個分支。

+1

也感謝您的補充解釋,加上butter71說它也可能有用。 – stivlo

相關問題