2014-03-28 221 views
18

我有一堆藏在其中的文件。git從存儲中刪除文件

但我不能申請我的藏匿處,因爲有衝突的文件。我已經確定了存儲中存在問題的文件,我想將其刪除。

如何從存儲中刪除單個文件而不破壞整個文件?

+1

這可以幫助你http://stackoverflow.com/questions/1105253/how-would-i-extract-a-single-file-or-changes-to-a-file-from-a-git-stash –

+1

@TimCastelijns所以,從這個答案,'$ git checkout stash @ {0} - '會是我想要的命令嗎? – Houseman

回答

12

一個存儲是一個提交(或者真的,兩個甚至有時三個提交),你不能改變提交。那麼對你的問題的文字回答就是「你不能」。幸運的是,你不需要

你說你不能申請你的藏品,因爲有衝突的文件。但你可以適用它,你只是得到一個合併衝突。你所需要做的就是解決合併衝突。

假設這個衝突在文件README.txt中,所以有必要寫一下這裏。

如果你想保持對分支版本來解決它,應用藏匿,然後檢查出的分支版本來解決衝突:

git stash apply 
git checkout --ours -- README.txt # or git checkout HEAD -- README.txt 

如果你想保持在 - 藏匿版本,提取一個:

git checkout --theirs -- README.txt # or git checkout stash -- README.txt 

或者,使用任何舊合併解決工具(我只使用文本編輯器),然後「混帳添加」的結果。

一旦你完成了所有的存儲,git stash drop將「忘記」構成存儲的提交。 (不這樣做,直到你確定你用它做,它是很難拿回來之後。)

+0

我的錯誤是,由於涉及權限和鎖定文件的特定於Windows的錯誤,sourcetree不讓我應用存儲。但是這回答了我的問題。 – Houseman

+0

當嘗試'git stash apply'時,由於衝突我得到一個錯誤:'錯誤:您對本地文件的更改將被合併覆蓋:' – BergQuester

+0

@BergQuester:在這種特殊情況下,您正在嘗試'git當您在工作樹中已經存在某些更改時,「隱藏應用」。通常情況下,即使這樣也行,所以我不完全確定發生了什麼(我需要在'apply'之前看到'git status'輸出,以及你給'git stash apply'的標誌)。一般來說,處理這種情況的方法是提交或隱藏* current *變化,然後使用'git stash branch'將以前的隱藏轉換爲新的分支,然後使用全套的Git工具你藏起來的是安全地存儲爲分支。 – torek

5

有這種情況的解決方法:

  1. 您的藏匿處保存爲補丁文件:

    $ git stash show -p > stash.patch 
    
  2. 應用此修補程序,跳過沖突(你會被要求解決衝突,就跳過丟失的文件):

    $ patch -p1 < stash.patch 
    

事後不要忘記清理stash.patch

+0

直截了當的解決方案 – bytefire

1

從您的本地代碼庫中刪除所需的文件,然後將其推送存儲。所做的更改將得到反映,您的文件將從存儲中刪除。

相關問題