我已經做了
git stash
git pull
git stash apply
并收到訊息
Auto-merging my_notebook.ipynb
CONFLICT (content): Merge conflict in my_notebook.ipynb
這是一個二進制檔案,所以我不知道如何手動解決沖突,就像我通常對源代碼合并沖突所做的那樣。
我怎樣才能用我隱藏的檔案替換我的作業目錄中的檔案?覆寫被拉取的版本?
uj5u.com熱心網友回復:
這是相對簡單的。stash 本身由兩個(或有時三個,但在本例中為兩個)提交組成,其中一個您可以使用 name 參考,stash另一個需要 name stash^2。下面stash的那個是與您運行時的作業目錄相對應的那個git stash,所以這就是您想要的那個。
因此,這些中的任何一個都可以在 Unix/Linux 系統上運行:
git restore --worktree --source=stash my_notebook.ipynb
git show stash:my_notebook.ipynb > my_notebook.ipynb
git checkout stash -- my_notebook.ipynb
第一個通常是使用的,因為它也適用于其他不太友好的系統,例如 Windows。請注意,它僅寫入您的作業樹副本。第二個也只寫入作業樹副本(使用 I/O 重定向),但第三個寫入 Git 的索引(也稱為“暫存區”)和您的作業樹副本。您可能需要這樣做,以便之后無需git add在檔案上運行;在這種情況下,您可以通過修改git restore要使用的命令來獲得這種效果git restore -SW --source stash。1
(因為git stash apply運行了與“我們的”和“他們的”提交的內部合并,所以可以使用--ours或--theirs提取HEAD作業樹和作業樹版本,但是,考慮到它們如何通過各種操作進行交換,2甚至我也無法保留跟蹤哪個是我自己,因此我不推薦git checkout --ours或git restore --theirs這里的任何內容。只需stash直接命名,以便您知道您的意思是哪個提交。)
1-S or--staged選項表示寫入暫存,-Wor--worktree選項表示寫入作業樹。該--source選項可以采用=stash或stash作為單獨的詞。這里的想法是展示呼叫它的所有不同方式。
2例如, during git merge,--ours是有道理的,但 during git rebase,--ours通常沒有意思,--theirs意思是“我的原始提交”,這似乎應該被稱為“我們的”。無論結果如何,總是有技術原因,人們總是可以從第一原理中解決它,但對于很少做的事情,打擾似乎很愚蠢。直接命名提交更容易。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/426172.html
