2014-03-28 188 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

从您的本地代码库中删除所需的文件,然后将其推送存储。所做的更改将得到反映,您的文件将从存储中删除。

相关问题