我有一个存储库,里面有许多文件。
但由于一个冲突文件,我无法应用我的存储库。我已经确定了存储库中的问题文件,并想要将其删除。
如何从存储库中删除单个文件而不破坏整个存储库?
我有一个存储库,里面有许多文件。
但由于一个冲突文件,我无法应用我的存储库。我已经确定了存储库中的问题文件,并想要将其删除。
如何从存储库中删除单个文件而不破坏整个存储库?
“Stash”是一个提交(实际上,通常是两个或甚至三个提交),你无法更改提交。那么,对于你的问题,字面上的答案是“你不能”。幸运的是,你并不需要。
你说由于存在冲突文件,你不能应用你的存储区。但是,你可以应用它,只是会出现合并冲突。你需要做的就是解决合并冲突。
假设冲突出现在文件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 add" 结果。
一旦你完成了存储,git stash drop
将“忘记”组成存储的提交。(在确定完成后再执行此操作,否则很难恢复。)
git stash apply
时,由于冲突而出现错误:error: Your local changes to the following files would be overwritten by merge:
。 - BergQuestergit stash apply
。通常即使如此也没问题,所以我不完全确定发生了什么(我需要在apply
之前看到git status
输出以及您给git stash apply
的标志)。总的来说,处理这种情况的方法是提交或隐藏当前更改,然后使用git stash branch
将先前的隐藏转换为新分支,然后使用完整的Git工具,现在您已经将隐藏的内容安全地存储为一个分支。 - torek--amend
本身。你根本没有修改提交。你正在创建一个新的、不同的提交,具有新的、不同的哈希值;旧的提交仍然存在,并且仍然被所有其他分支和标签名称所使用,这些名称找到了这个提交(理想情况下,这些名称为零,但当没有时,就会暴露出这种欺骗)。也没有“修改存储”,这次也没有--amend
标志:你只需要在原来的位置应用(可能是--index
)原始的存储,放弃它,并构建一个新的存储。 - torekgit stash
是一组较差的工具(虽然已经改进了),所以没有像 git commit
的 --amend
那样具有欺骗性选项的花哨前端。最接近的一个是 git stash branch
,它会检出存储的提交群集的父节点,创建一个新的分支名称,然后应用(带有 --index
)存储并丢弃它。 - torek对于这种情况,有一个解决方法:
将您的贮藏保存为补丁文件:
$ git stash show -p > stash.patch
应用此补丁,跳过冲突(你将被要求解决冲突,只需跳过缺失的文件):
$ patch -p1 < stash.patch
别忘了之后清除stash.patch
文件!
patch
命令添加_Reverse_
选项(-R
)_->_ patch -R -p1 < stash.patch
。 - yunzengit restore --staged path/to/file
git reset HEAD -- path/to/file
从暂存区中删除该文件从您的本地代码库中删除所需的文件,然后将其推送到存储区。更改将得到反映,并且您的文件将从存储区中删除。
$ git checkout stash@{0} -- <filename>
就是我想要的命令了吧? - user773737