git - git rebase 冲突,如何删除在 HEAD 中删除的所有冲突文件
问题描述
在某些情况下,我正在尝试将我的分支从 master 中重新定位。但是在 master 上进行了一些更改,删除了大部分代码库(这很好,并且是预期和讨论的)。现在我正在重新调整我的更改,但我收到了大量的文件冲突,说
CONFLICT (modify/delete): someFile.fileType deleted in HEAD and modified in added commitName. Version added commitName of someFile.fileType left in tree.
手动处理 10 个文件很好,但我有超过 1000 个这些文件。我怎样才能git rm
这些文件并继续变基?
一些额外的信息:我运行了以下命令
git rebase master
解决方案
该方法很简单,但这种方法的应用需要小心,因为它很容易产生可怕的结果。您需要做的是确定哪些文件存在于索引中的哪个阶段,然后相应地更新索引。
正如你所说,你有一个:
CONFLICT (modify/delete): someFile.fileType deleted in HEAD and modified in ...
因此,您将有一个文件存在于基本提交中(在索引中的第 1 阶段),并且存在于另一个提交中(在索引中的第 3 阶段),但不在HEAD提交中(在索引中的第 2 阶段)。该文件也将存在于work-tree中。
要找出索引中有哪些文件,在哪些阶段下,请运行git ls-files --stage
. 然后,您需要更改索引内容以解决任何冲突并确定将提交的内容。如果您希望通过在最终提交中删除git rm someFile.fileType
文件来解决此冲突,您可以简单地运行,这将删除所有索引条目和文件的工作树版本。
因此,作为一种非常欺骗性的方法,这可能有效:
git ls-files --stage | awk $'/ 3\t/ { print $4 }' | xargs git rm
对此要非常小心!如果你一味地套用一些你不懂的食谱,你可能会烤出一个有毒的蛋糕。请注意,这完全忽略了同一文件是否具有阶段 2 条目,并且仅在索引中查找阶段 3 条目。对于其中包含空格的任何路径名,它也行为不端,因为awk
这里是由空格分隔的。
请注意,所有已解决git rm
的文件都在索引中作为第 0 阶段,因此如果您有除修改/删除之外的任何冲突,您可以先手动解决它们,然后对其余的使用上述命令。
推荐阅读
- javascript - Javascript:在存储函数上通过引用传递的全局变量
- java - 强制重绘 TextView 实例
- excel - 如果 C 列中的单元格包含单词“FALSE”或“ERROR”,则返回消息框
- pytorch - 如何在导入 Torch 时修复“无法初始化类型 TensorProto DataType”错误?
- python - 是否可以为系统中存在的所有python3版本安装软件
- python - 如何使用机器学习从电子邮件中提取特定信息?
- k6 - 如何设置阶段运行的迭代?
- python-2.7 - 使用 int 输入创建和命名函数以供以后参考
- php - 如何在树枝对象上分配条件值
- java - 通过 oncreate 返回一个可序列化的对象