Git rebase冲突:许多文件在本地删除,在远程修改。怎么把它们都给我?

Git rebase冲突:许多文件在本地删除,在远程修改。怎么把它们都给我?,git,rebase,merge-conflict-resolution,git-merge-conflict,Git,Rebase,Merge Conflict Resolution,Git Merge Conflict,我正在使用分支功能并重新调整到主功能,历史已经发生了分歧。在功能中删除了几十个文件,这些文件同时在主机上被修改。 我确信我不再需要这些文件了,所以请重新设置基础,保留功能中的内容: git-rebase-x他们的主机 它接受我在功能上所做的所有更改,但仍会为主功能中已在功能上删除的修改文件留下冲突,报告: 冲突(修改/删除):部分/file1在HEAD~3中删除,在master中修改。树中某些/file1的主版本。 及 TL;博士oneliner: git ls文件--stage | awk-v

我正在使用分支功能并重新调整到主功能,历史已经发生了分歧。在功能中删除了几十个文件,这些文件同时在主机上被修改。 我确信我不再需要这些文件了,所以请重新设置基础,保留功能中的内容:

git-rebase-x他们的主机

它接受我在功能上所做的所有更改,但仍会为主功能中已在功能上删除的修改文件留下冲突,报告:

冲突(修改/删除):部分/file1在HEAD~3中删除,在master中修改。树中某些/file1的主版本。


TL;博士oneliner:

git ls文件--stage | awk-v stage=3-v path=4'$stage==2{print$path}'| xargs git rm


回答我自己的问题,感谢@torek对原始问题的评论

git ls files--stage
将列出被他们删除的文件,其stage==2。
因此,使用
awk
xargs
,在所有这些文件上调用
git rm
的完整一行代码是:

git ls文件--stage | awk-v stage=3-v path=4'$stage==2{print$path}'| xargs git rm

先在没有最终xargs的情况下运行它,检查哪些文件将被删除

自己试试看

这是一个非常小的GitHub回购案例。克隆和签出功能,然后尝试将其重新设置到主机上

git clone https://github.com/chhh/git-rebase-conflict-resolution
git checkout feature
git rebase -Xtheirs master
git clone https://github.com/chhh/git-rebase-conflict-resolution
git checkout feature
git rebase -Xtheirs master

如果您仅有的冲突是未合并的路径“被它们删除”,我认为只要
git add-u
就可以解决这个问题。

可能有比这更简单的方法,但是:从
git ls文件--stage
开始。“被他们删除”的每个文件都有一个阶段1条目和一个阶段2条目,但没有阶段3条目。阅读列表(使用awk或python),找到这些名称,将它们传递给
git rm
(可能通过xargs)。@torek感谢您的提示,我正在寻找
git ls文件--stage
!最后一个答案是:
git ls files--stage | awk-v stage=3-v path=4'$stage==2{print$path}'| xargs git rm
注意这个命令:当日常发生冲突时,所有三个阶段都会存在文件。(您的
-x继承人
意味着不会有任何此类冲突,但如果有人试图推广awk命令,这可能会很痛苦。)这里的假设是,当您是唯一使用回购的人时,这是一种相当普遍的情况。您从忘记首先拉取的机器提交,然后您确定您只需要特性分支的内容,而不关心冲突。以下是这种情况下的回购协议示例:
git clone https://github.com/chhh/git-rebase-conflict-resolution
git checkout feature
git rebase -Xtheirs master