2011-09-18 111 views
35

我克隆了一個git repo,然後開始在其主分支中播放。過了一段時間,我想忽略我剛剛做出的更改(不提交它們),並切換到另一個分支。但是,它阻止我切換,因爲有未提交的更改。我怎麼忽視它們而不把它們藏起來呢?這是發生了什麼事情:git中止當前更改後切換分支

$ git checkout gh-pages 
error: Your local changes to the following files would be overwritten by checkout: 
     somefile.txt 
Please, commit your changes or stash them before you can switch branches. 
Aborting 

回答

59

選項1

git checkout -f gh-pages 

選項2

git reset --hard  # beware: don't make that a habit 
git checkout gh-pages 
+2

選項1不起作用。 Git是一位不願意解決問題的人。我被迫讓git重置 - 一個習慣。 Git命令的聖盃修復了一切。 – shailenTJ

+2

@shailenTJ你應該是一個詩人:)放心,我使用git reset --hard經常。但事情是,這是一個強大的武器,你不應該**不使用它,因爲它會失去任何沒有提交的東西(或者至少添加到索引一次,這將是棘手的恢復)。 – sehe

+0

選項2不適合我,它只是重複錯誤。 Git是一個完全的噩夢。 – Owl

5

您可以忽略所有未提交的更改。

git reset --hard HEAD

3

如果你真的肯定要扔掉你提交的修改(即那些上演,以及那些在工作樹),你可以這樣做:

git reset --hard 

一般來說,積攢通常更安全

+0

我真的想牛逼扔掉我的變化,它不會讓我。我試過混帳重置 - 哈哈,我試圖存儲和放下存儲。 Helllllp。從這個糟糕的版本控制軟件中拯救我吧。 – Owl

+0

@Owl我認爲最好爲你的問題創建一個新的問題,包括'git status'的輸出。 –

3

如果你有不分階段的文件,請嘗試:

git checkout -- . 

或者

git checkout -- filename 
+0

這解決了我的問題,謝謝。看來這個問題是通過git checkout解決的 - 。或者git reset --hard。其中一個應該解決它。 – Owl

11

只是爲了完整起見,併爲那些誰降落在這裏通過搜索:雖然OP要求專門爲沒有stashing的解決方案,但值得一提的是,隱藏確實是一個非常不錯的選擇:

該命令保存您的本地修改,並恢復工作目錄以匹配HEAD提交。

所以,你可以簡單地

git stash 

這就好比復位到HEAD。當是絕對積極的肯定,確實這些未提交的修改是毫無價值的,只是

git stash drop 

你甚至可以有多個儲物箱等,如上面的文檔鏈接提及。

我會推薦這種做法,因爲它會讓人習慣於在重置之前加倍考慮,而不會花費大量成本。

+0

這對我也不起作用。 – Owl

0

混帳添加-A 混帳藏匿

這將清除所有你做

0

您可以放棄你在一個特定的文件所做的更改的改變(只有那些沒有COMMITED):

git checkout somefile.txt 

然後順利地跳到分支:

git checkout gh-pages