是的,你搞砸了,但好事是你會從這個錯誤中吸取教訓。當您使用Git時:頻繁使用commit
,使用切換上下文時使用stash
。
在你的例子中,你做了一些修改,例如你修改了foo
並創建了bar
。你可以看到的變化實驗開始前:
$ git status
On branch master
Changes to be committed:
new file: bar
Changes not staged for commit:
modified: foo
在這一點上,如果你創建一個新的branch
並在其上進行切換,什麼都不會我修改既不在你working directory
或您index
因爲新的分支experiment
指向與主人master
一樣提交。
$ git checkout -b experiment
A bar
M foo
Switched to a new branch 'experiment'
$ git status
On branch experiment
Changes to be committed:
new file: bar
Changes not staged for commit:
modified: foo
所以從這裏如果你做了改變,你會失去你以前的工作。也就是說,這並不完全正確,因爲bar
在索引上(在執行git status
時爲綠色)。如果修改bar
您的通知,您的工作目錄的變化,但以前的版本仍保留在指數:
$ echo "bar" >> bar
$ git status
On branch experiment
Changes to be committed:
new file: bar
Changes not staged for commit:
modified: bar
modified: foo
兩個最好的解決方案,以保持你的變化軌跡是:
- 提交頻頻對虛擬分支。
- 使用git stash在上下文之間切換。
在你的情況,你會犯一個虛擬分支更改開始實驗前:
$ git checkout -b previous_changes
$ git commit -am "Something I want to keep"
$ git checkout -b experiment [email protected]{1}
do some changes...
你是否也檢查過實驗分支? –
是的。他們都顯示相同的狀態。 – Alex
我讀過git文章:_note說如果你的工作目錄或臨時區域有未提交的更改與你正在檢查的分支發生衝突,那麼Git不會讓你切換分支。切換分支時最好有一個乾淨的工作狀態。有很多方法可以解決這個問題(即存儲和提交修改),我們稍後會介紹,存儲和清理_ –