2016-10-04 105 views
2

在mac(sierra)上使用git; git 2.8.4版(Apple Git-73)Git簽出不會恢復文件

git checkout <master> 

命令不會恢復在另一個分支上進行的文件更改。

這就是我所做的。

cd project_folder 
git clone -o origin -b master [email protected]:prj/PRODUCTION.git 
git branch -b new_branch 
git checkout new_branch 
<make changes to an existing file> 
git checkout master 

我希望看到沒有在new_branch中做出更改的主版本的乾淨版本。但是當我在分支之間切換時,我所做的更改得到了延續。

此前(很長時間後面),這用於像我所期望的那樣工作。我錯過了什麼嗎?

我做了相當數量的google & stackoverflow搜索。沒有得到我期待的結果。我得到的最接近的結果是,但他們並沒有多大幫助。 1. https://superuser.com/questions/892847/git-branch-branches-not-different 2. Git branch switching does not change code folder files

+1

蒂姆Biegeleisen指出,這是預期的行爲。您可以在檢查主人之前始終使用存儲更改。 – Rashmirathi

回答

1

這是預期的行爲,並且是使用Git時,我通常看到的。從documentation的git的結帳:

要對<分支工作準備>,通過更新索引和工作樹中的文件,並通過在分支指着頭切換到它。 對工作樹中文件的本地修改保留爲,以便它們可以致力於<分支>。

如果你需要切換分支機構和你的工作目錄是不乾淨的,這裏有幾個選項:

1)你可以讓你的當前分支的臨時承諾:

git commit -m 'WIP' 

我說「臨時」,但實際上這和其他任何提交一樣。唯一的區別是,當您返回到這個分支,你會修改這個承諾,一旦你通過完成任務:通過

git stash 

積攢

git commit --amend -m 'Finished WIP' 

2)藏匿了你的更改將不創建兩個提交,一個用於工作目錄,一個用於舞臺。當你想將這些更改回你可以通過應用這些變化:

git stash apply 
+0

感謝您的快速響應。我看到,如果我提交我的更改,然後切換到主,那麼我不會從new_branch獲得更改。有沒有辦法做到這一點,而不做提交。基本上我在new_branch上工作,然後突然出現了一個需要在master上完成的hot_fix。我如何做到這一點? –

+0

@CyriacGeorge我更新了我的答案。您可以進行臨時提交或儲存您的更改。隱藏可能是更容易的選擇。 –

+0

再次感謝。我已經接受了這個答案,因爲它回答了原來的問題。是否有撤消提交的命令;意思是,從new_branch的歷史記錄中刪除條目,但同時保留文件中的修改,以便進一步更改。 –