2012-01-03 39 views
37

我在本地有兩個分支,masterBerislav。後者目前活躍,我已經承諾所有的變化。當我嘗試檢出到master,我得到以下信息:即使所有更改都已提交,Git會要求我提交或隱藏結帳主文件上的更改?

error: Your local changes to the following files would be overwritten by checkout: [list of files changed in the active branch] Please, commit your changes or stash them before you can switch branches. Aborting

然而,其他的一切我想 - commitstatusmerge - 告訴我,沒有什麼承諾(工作目錄乾淨)。我需要做些什麼才能到達我的master分支?

編輯:當我嘗試git stash,我越來越:

error: feeding unmodified [file path] to diffcore

在上面的錯誤中列出的所有文件。

+0

http://stackoverflow.com/questions/6337122/git-branches-behaving-strangely和http:// stackoverflow.com/questions/6638937/switching-branches-in-git-when-will-i-get-you-have-local-changes-cannot-switc答案可能有幫助,http://stackoverflow.com/questions/ 7463392 /中止後切換-a-branch-current-changes-in-git作爲可能的替代方案 – VonC 2012-01-03 07:13:46

+6

'git status'的輸出是什麼? – manojlds 2012-01-03 07:28:12

+0

+1給manojlds。這是解決這個問題的有用信息。 – 2012-01-03 07:34:09

回答

41

今天我遇到了類似的問題。 git status未列出結帳時抱怨的文件。我做了一個:

git checkout -- path/to/file 

而且,這撤消了文件的任何更改。

撤消[1]在當前工作目錄所有未分級的變化更簡單的方法:

git checkout -- . 

[1] - 被警告 - 你將失去你的工作在任何其他未分級的變化(如果有的話)。如果你不知道你在做什麼,然後繼續你的工作文件的備份上:)

+0

這幫了我很大的時間。 '''git checkout -f branch'''沒有工作,但是這個伎倆。 – rurp 2016-10-13 14:40:38

+0

這有時沒有幫助。在一個實際的例子中,一個文件的行尾從CRLF變爲LF,.gitattributes包含'* .sh text eol = lf',但是'git checkout - .'沒有被新的CR-less版本取代 – 2017-12-19 08:25:15

1

似乎你的工作副本中有未跟蹤的文件,這些文件在另一個分支上被跟蹤。 Git拒絕檢出其他分支,因爲當前未跟蹤的本地文件將被另一分支上的文件覆蓋。

現在,您可以

  • 這些文件添加到您當前分支,如果這些文件是有關這個分支
  • 刪除這些文件,如果不需要
+0

另一個選擇是使用'git stash'將文件保存在存儲器中並在將來某個時候恢復它們('git stash pop') – Grizzly 2012-01-04 02:47:26

+0

問題是跟蹤了列出的文件,並且當前分支是據報道是最新的。只有在嘗試檢出主設備時纔會出現該問題。 – 2012-01-04 10:17:36

+0

@BerislavLopac你的回購(http://progit.org/book/ch7-2.html)中是否有塗抹/清潔過濾器?或者一個活躍的crlf替換設置(http://stackoverflow.com/a/2825829/311635)? – Rudi 2012-01-04 11:07:45

10
他們

移動問題的文件到其他地點。然後從樹中刪除有問題的文件。再次拉動。然後將違規文件中的更改分散到您剛剛拖出的文件中。黑客,但它的作品。

+0

這解決了我的問題。謝謝! – Kirill 2012-06-10 20:27:14

+1

這是唯一有效的解決方案 – 2012-06-21 15:50:33

+3

這就是讓git難以使用的聲譽。 – 2013-08-19 13:35:33

39

像這樣簡單:

git stash 
git stash pop 

「錯誤」時看到的運行git stash AREN沒有什麼需要關注的。這只是認識到該文件沒有任何未提交的更改。

+0

謝謝,這個伎倆。 – nerdoc 2016-10-24 22:18:39

1

非常類似於@JohnHammink的答案,但在這裏。

解決方案

  1. 刪除文件到另一個目錄。
  2. 提交您的更改(它可能表明您剛剛刪除了兩個文件)。
  3. 再次將文件添加到目錄。
  4. 提交(您應該只能看到一個正在提交的文件)。

在我的情況下,這是因爲一個文件被重命名,只改變了大小寫。例如fooViewModel到FooViewModel。 Git一直在想,同一個文件實際上是兩個單獨的文件。

我認爲這與Unix是否區分大小寫,而窗口不是真的有關。

希望這可以幫助

+0

我將文件移到了另一個位置,我能夠更改分支。 – 2016-07-29 15:20:25

12

我有一個新鮮的克隆類似的問題。我只是被迫結賬與--force(-f)標誌

git checkout --force some_branch 

也許不是解決您所要更改回購問題的最佳途徑,但對我來說,我確信我hadn沒有做任何改變,只是想切換分支。

+1

這是唯一對我有用的答案。 – 2015-12-01 20:57:56

+0

對我來說同樣的事情。我嘗試過所有選項,但這個工作正常,謝謝@Adam Bowen – 2016-11-11 20:15:07

0

我有同樣的問題,這解決了我的問題(在Linux上):

git config --global core.autocrlf input 
相關問題