[英]How to ignore a tracked file locally only
如何僅忽略本地已存在於索引中的文件? 我不想從索引中刪除文件,從而影響其他人。 我嘗試過的事情:
修改文件並嘗試切換分支時,兩個update-index命令均會給出錯誤。
$ git checkout myBranch
error: Your local changes to the following files would be overwritten by checkout:
myFile.json
Please commit your changes or stash them before you can switch branches.
Aborting
此錯誤是因為根據git文檔, “內容安全仍然是優先事項”。 有任何想法嗎?
問題變成: 當您簽出其他提交時,您想對myFile.json
做什么?
使用--skip-worktree
(此處不使用--assume-unchanged
,這是一種速度破解,而不是絕對指令;請參閱Git-“ assume-unchanged”和“ skip-worktree”之間的區別 )告訴Git它不必太在乎對工作樹文件的修改。 但是...它們是對工作樹文件的修改。 假設此文件的路徑為P。 Git保留與HEAD
提交匹配的索引版本-假設這是或將在我們正在查看時,提交ID1234567。工作樹版本會更改,並且當您執行各種Git操作時,“跳過工作樹版本”,只是繼續使用P的索引版本。 這使您可以使用P的(未更改的)索引版本來修改工作樹P ,甚至根據需要進行新的提交。
無論如何,您的P的工作樹版本不再與您的P的索引版本匹配。 正如我們指出的那樣,您現在處於提交1234567上,即git rev-parse HEAD
生成該哈希ID。
但是,現在,我們發現要讓Git簽出其他提交,即將HEAD
從提交1234567移到commitcba9或其他東西,Git將不得不替換或刪除 P的索引版本。 它可以做到這一點,但是按照當前的編碼,它也將替換或刪除P的工作樹版本。
(切換到一些其他的其他承諾,如說8888888-一個非常幸運的承諾在中國,可能不需要觸碰P的索引版本。在這種情況下, git checkout
會很樂意切換HEAD
到該犯,再后來,再次回到1234567。但是fedcba9不太幸運。)
這是“安全的”替換或刪除工作樹版本P的當且僅當 P的指數版本匹配HEAD
P的版本,從此你可以從舊獲取該版本P的背HEAD
,即從1234567在我們的例子中。 但是我們已經聲明P的工作樹版本與HEAD
版本不匹配。 --skip-worktree
標志不會更改此操作的(取消)安全性; 這只是意味着其他各種操作不會抱怨工作樹版本與索引版本不匹配。
現在,您確定要從commit 1234567
移到fedcba9
。
提交1234567
擁有P的版本,而您的P的索引版本與此匹配。 您的P的工作樹版本沒有。
提交fedcba9
擁有P的不同版本,或者說P不再存在,並且P的索引版本與此不匹配。
檢出fedcba9
將把fedcba9
的P版本放入索引,或從索引中刪除P。 這兩種操作都應替換或刪除P的工作樹版本,以便您可以看到fedcba9
中的內容(或不顯示)。 絕對不同於1234567
。
你想看到版本的文件? 如果是這樣,請將P的當前工作樹內容保存到其他位置,將P還原到索引/ HEAD提交中的內容,然后簽出fedcba9
。 現在,您將在工作樹中fedcba9
。 您在其他地方保存的P將是安全的。
您是否在乎該文件的該版本中的內容,並且想要保留其中的內容? 如果是這樣,請將P的當前工作樹內容保存到其他位置,將P還原到索引/ HEAD提交中的內容,然后簽出fedcba9
。 然后用您保存的其他位置的副本覆蓋工作樹中的所有內容。
Git不會為您選擇任何一種,但是您自己做起來很容易。 您只需要確定哪個,然后執行即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.