2015-03-24 74 views
3

我試圖檢出一個分支刪除文件,但不斷收到此錯誤:無法從工作目錄

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

但是:

  • 當我stash,沒有什麼變化。 file.txt仍在工作 目錄中。
  • 當我I add該文件,然後stash,它回到 工作目錄。
  • 當我I reset --hard,沒有什麼變化。 file.txt仍爲工作目錄中的 。
  • 當我checkout --當前 分支,沒有什麼變化。 file.txt仍然在工作目錄中。
  • 我甚至試過git rm -f file.txt然後stash。也沒有幫助。

在做完所有這些之後,我仍然無法簽出不同的分支,因爲我被卡在file.txt中。

我該如何解釋這裏發生了什麼?我該如何擺脫file.txt?

我正在使用Windows上的git-scm,如果它很重要。

編輯:git diff --check顯示尾隨空白有差異。爲什麼不能像任何其他文本差異一樣對待尾隨空白,而是通過不讓我resetstash這麼奇怪?這種行爲是否可配置?

回答

1

我們結束了反正取出text=auto設置,因爲我們在Windows上的所有工作。現在,Windows行結束符保存在存儲庫中,它似乎解決了這個問題。

1

很可能,存儲庫包含File.txtfile.txt(如果您正在與使用Linux或Mac的人進行協作,可能會發生這種情況)。 Windows認爲這是相同的文件,所以只有其中一個會存在於工作目錄中,而git會一直認爲另一個文件已被更改。

要檢查是否這實際上是問題,運行此命令:

git ls-tree -r HEAD 

,並尋找與不同的外殼在同一目錄中的文件(或用不同的外殼目錄)。

解決此問題的最簡單方法是讓另一個平臺上的某個人刪除或重命名這兩個文件。 (如果你的項目在某種程度上依賴於同時擁有這兩個文件,解決方案是要麼重新考慮這個需求,要麼從Windows切換回來......)

+0

謝謝你的想法,但事實並非如此(沒有雙關語:)) – 2015-03-24 21:38:32

+0

:D - 文件名或路徑中是否有非英文字符? – 2015-03-24 22:23:45

+0

不,所有的字符都屬於'[a-zA-Z。]' – 2015-03-24 22:39:16

1

你可能有行尾問題閱讀以下內容:

https://help.github.com/articles/dealing-with-line-endings/

長話短說,儘量改變.gitattributes文件如下:

* text=auto => #* text=auto 

或者

git config --global core.autocrlf true 

另一種選擇是提交fi樂

這一切都取決於是否所有的開發商在同一個平臺或不工作..

+0

設置已經如您所述。 – 2015-03-25 11:34:58