我在使用基本的 git pull 時遇到了問題。當我檢查 git status 時,作業樹是干凈的。但是當我嘗試 pull 或 fetch 并合并時,git 說本地更改將被覆寫并給我一個檔案串列。我試過git reset --hard HEAD然后合并,但同樣的問題。我也嘗試過,git stash但仍然沒有。
git 抱怨的所有檔案都在 obj/ 目錄中,我的 gitIgnore 中有該目錄,所以我不完全確定為什么 git 開始擔心這些檔案。*但是,我遇到了以前未包含在 gitignore 中的 git 跟蹤檔案的問題。我嘗試使用 取消跟蹤問題檔案夾和檔案git update-index --skip-worktree,但如果這仍然是我的問題的一部分,我不會感到驚訝。
關于最佳下一步行動的任何建議?我的目標是拉取遠程提交,我不關心 git 所指的本地檔案。
即使在干凈的作業樹之后 git 合并錯誤
uj5u.com熱心網友回復:
您可以自己查看遙控器是否有這些檔案 git ls-tree origin/main
您git stash沒有保存任何內容,因為您(可能)使用本地.gitignore. 再試一次git stash --include-untracked。
存盤本地檔案后,git pull再次運行以嘗試將本地檔案與遠程檔案合并。
uj5u.com熱心網友回復:
我嘗試使用 取消跟蹤問題檔案夾和檔案
git update-index --skip-worktree,但如果這仍然是我的問題的一部分,我不會感到驚訝。
是的。
人們試圖在這里使用兩個標志,--assume-unchanged以及--skip-worktree. 兩者都不起作用,除非有時——好吧,非常頻繁——偶然,就像它一樣。不幸的是,它“偶然”起作用的事實經常使人們相信它應該起作用。它經常出現的事實意味著GIT中應該具有的一些方法來使這項作業,但Git不會。1
你所做的--skip-worktree是讓 Git 悄悄地忽略你的 obj/檔案相對于它們的 obj/檔案更新的事實。這行不通:不完全正確。它所做的是進行設定,以便您進行新的提交,使用舊obj/檔案而不是更新的obj/檔案。正確的解決方案可能是從所有未來的提交中洗掉這些obj/檔案,但這有點破壞性,并且需要與存盤庫一起作業的每個人都協調(盡管不是一次全部)。(理想情況下,人們可能會洗掉過去的obj/檔案也提交,但這更具破壞性,需要更多的協調。remove-and-proceed 方法可以逐步完成,因此更易于管理。)
為了使事情現在起作用,您必須取消--skip-worktree設定為每個檔案設定的位。然后,您必須弄清楚如何處理每個檔案:即,對于您之前推遲弄清楚要做什么的所有檔案,您現在必須弄清楚要做什么。
可能正確的做法是洗掉它們,正如已經指出的那樣。但是,您可以通過以下方式回到“推遲作業”狀態:
- 將適合您的檔案移開,以便它們根本不在存盤庫中;
- 使用
git restore(或者git checkout,如果你有一個舊版本的Git)放回了錯誤的檔案是在倉庫中; - 繼續合并,現在可以作業了;
- 通過放回移動的檔案來洗掉不適合您的檔案;和
--skip-worktree再次設定位。
這將使您回到以前的位置,“正確解決問題”部分被推遲,與您一直在作業的完全一樣。
1正如我喜歡說的,Git 是一種工具,而不是解決方案。我有一個朋友,他的武裝部隊教官過去常常強調這一點,尤其是像 GPS 導航這樣的東西。如果 GPS 顯示在這條路上轉彎,而那里沒有實際的道路,不要認為你應該在那里轉彎。我在澳大利亞遇到過一次這種情況。我不知道是否有有有路就有在未來,或者,如果出現了在過去路上有一個計劃,但沒有有路必有然后。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387332.html
