簡體   English   中英

git checkout - <files> 不放棄更改?

[英]git checkout — <files> doesn't discard changes?

我的工作目錄中有我正在嘗試丟棄的更改(重置為當前索引版本的文件),但是, git checkout -- <file>不會丟棄更改。 我試圖手動刪除文件( rm -r files )然后運行git checkout -- . ,再次將文件顯示為已修改。

$ git checkout -- .
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   files/Hulk.png
#   modified:   files/Hulk_2.png
#
no changes added to commit (use "git add" and/or "git commit -a")

運行git diff顯示文件被修改...

diff --git a/files/Hulk.png b/files/Hulk.png
index 1c256cb..1d37fe0 100644
Binary files a/files/Hulk.png and b/files/Hulk.png differ
diff --git a/files/Hulk_2.png b/files/Hulk_2.png
index 1c256cb..0717199 100644
Binary files a/files/Hulk_2.png and b/files/Hulk_2.png differ

注意:有些人說要運行git checkout . ,但這將獲得與git checkout -- .相同的結果git checkout -- . --只是git checkout命令中使用的符號,用於區分樹狀/提交點和文件/路徑。

操作系統:OSX 10.6 Git:1.7.10.2

造成這種情況的原因是多個文件具有相同的名稱但不同的情況。 在不區分大小寫的OSX中,不喜歡具有相同名稱但具有不同情況的多個文件。 它將它們視為同一個文件。 為了解決這個問題,我將git mv (或者只是mv )運行到一個臨時文件名,添加了臨時文件,允許git刪除舊的/錯誤命名的版本,然后是第二次提交以命名它們。 這也可以在文件系統上得到糾正,該文件系統允許具有相同名稱的不同文件是不同的情況。

你試過了嗎

git config --global core.autocrlf false

要么

git config --global core.filemode false

根據您的意見,您必須將存儲庫配置為區分大小寫:

git config core.ignorecase false

這允許git跟蹤這兩個文件(雖然文件系統只顯示一個,這非常令人困惑)。 以下是復制步驟,以演示當git正確跟蹤區分大小寫時發生的情況:

git init /tmp/test && cd /tmp/test
git config core.ignorecase false
echo test>test && git add test && git commit -m "lowercase t"
mv test Test

現在git status顯示沒有test差異:

git status -s
 ?? Test

提交Test並使用git ls-files查看我們現在正在跟蹤的內容:

git add Test && git commit -m "uppercase T"
git ls-files
 Test
 test

ls報道什么? 為什么,只是'測試',自然:

ls
 Test

最后,當我們修改Test時會發生什么?

echo garbage>Test
git status -s
 M Test
 M test

真是一團糟。

采用 。 代替 -

git checkout .

出於某種原因,同樣的事情發生在我身上,但這不是一個區分大小寫的問題。 刪除文件,然后更改分支解決了問題。

如果您要放棄所做的所有更改,只需使用即可

git checkout .

我遇到了同樣的問題。 我發現這兩個有問題的文件有DOS行結束字符。 我這樣做是為了解決這個問題。

1-使用不同的克隆來更改結束到UNIX的行 - 2刪除出現問題的克隆並重新克隆它。

為了避免下次出現此問題,我決定將文件系統轉換為區分大小寫。

令我驚喜的是,它在Mac OS(10.13.4)上非常簡單。

可以使用不同的文件系統快速創建新的磁盤卷:

  • 運行磁盤工具
  • 點擊容器
  • 點擊量(+)

我將新卷命名為“Projects”並將Format設置為APFS(區分大小寫)。

之后,我將所有項目移至新卷。

在我的案例中有什么幫助:(也改善了vinboxx的答案)

我已經按以下方式配置了.gitattributes

* text eol=crlf

(我希望-X renormalize在合並后自動使用正確的格式)

暫時評論該行以及設置git config core.autocrlf false 一切都恢復正常。

我用git checkout - 。

還有git checkout。

==與op相同的是,它們都適用於Mac OSX 10.7和Linux,同時適用於兩者

用git版本1.7.7.5(Apple Git-26)和git 1.7.1編譯

嘗試不同的回購,看看你是否得到相同的結果。 也許是git版本中的命令錯誤?

使用“rm -r file”從文件系統中刪除文件時,不要將其從存儲庫中刪除。 使用“git rm”,你需要在git中使用相同的功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM