2009-08-20 143 views
229

我正在研究git分支並準備好提交我的更改,因此我使用有用的提交消息進行了提交。然後我心不在焉地對那些不值得保留的代碼做了小小的修改。我現在想改變分支,但git給了我,git:切換分支並忽略沒有提交的任何更改

error: You have local changes to "X"; cannot switch branches.

我以爲我可以改變沒有提交的分支。如果是這樣,我該如何設置?如果不是,我該如何解決這個問題?我想忽略沒有提交的小改動,只是改變分支。

+1

我相信這只是發生時,他們的變化是上演承諾但不COMMITED?如果你還沒有使用git add或類似的方法來轉換文件,那麼git checkout對於更改分支就可以。 – 2009-08-21 03:16:41

+1

嗨傑里米, 'staged'是什麼意思? 在更改分支之前強制用戶提交文件似乎不是一個很好的工作流程。例如,如果我在主存儲庫中並且很快想檢查分支中的某些內容。我必須首先將代碼提交給主人,即使代碼是一半寫的! 您是否確實應該可以在這種情況下檢查分支? – 2009-08-21 09:25:46

+0

@boyfarrell您可以使用'Git stash'臨時保存更改而無需提交。 – Howiecamp 2016-10-29 23:01:58

回答

297

您需要一個乾淨的狀態來更改分支。只有在不影響'髒文件'的情況下才能允許分支結賬(如評論中的Charles Bailey備註)。

否則,你應該:

  • stash您的電流變化或
  • reset --hard HEAD(如果你不介意失去這些微小的變化)或
  • checkout -f(當切換分支,繼續即使指數或工作樹從頭部是不同的。這是用來扔掉本地更改。)
+28

「你需要一個乾淨的狀態來改變分支。」只有當分支更改影響'髒文件'時纔是如此。 – 2009-08-20 11:46:37

+0

VonC很好的回答以及Charles Bailey的評論 – 2011-01-10 13:07:33

+6

對於存儲方法,我輸入了「git stash save」,「git checkout other branch」,然後最後輸入「git stash pop」。 – 2011-10-13 01:05:54

7

如果您更改了在切換分支時Git也需要更改的文件,它不會讓您。要放棄工作更改,請使用:

git reset --hard HEAD 

然後,您將能夠切換分支。

12

關注,

$: git checkout -f 

$: git checkout next_branch 
90

如果要放棄更改,

git checkout -- <file> 
git checkout branch 

如果你想保留更改,

git stash save 
git checkout branch 
git stash pop 
+8

事實上,Romerun所說的(完成):'git stash save'(當在工作branchY中),然後'git checkout branchX'做一些'git add/commit -m'等'git checkout branchY'和'git stash pop '找回存款 – Highmastdon 2012-11-09 09:36:41

+2

也許是這樣。我有一種情況,儘管我想要做什麼回答說,如果我正確地理解它:存儲更改,從Y切換到X,然後彈出更改並在X上提交它們。 – 2015-10-06 17:02:31

51

很好,應該是

git stash save 
git checkout branch 
// do something 
git checkout oldbranch 
git stash pop 
+3

是的,存儲是全局的,而不是分支具體來說,如果我切換分支後隱藏彈出我會得到與其他分支一樣的存儲 – 2016-01-19 19:07:54

+4

應該注意'git存儲將默認爲'git存儲保存' – 2016-08-08 14:19:49

+0

謝謝,這對我很有幫助 – 2017-05-24 12:45:46

7

注如果你已經合併了遠程分支機構或者本地提交了一個ð想回去到遙控雲臺你必須做到:

git reset --hard origin/HEAD 

單獨HEAD將僅指本地提交/合併 - 好幾次我都忘記了復位時,以「你的資料庫是X結束提交提交..「當我完全打算核彈所有更改/提交併返回到遠程分支。

0

切換到一個新的分支失去的變化:

git checkout -b YOUR_NEW_BRANCH_NAME --force 

切換到現有的分支失去的變化:

git checkout YOUR_BRANCH --force 
相關問題