Git rebase - 如何为所有合并冲突接受远程分支?

时间:2015-09-25 23:00:03

标签: git git-rebase

我正在使用git 1.7.1与my_branch_1合作,而且我正在尝试从主人那里重新定位。我在directory_1中对自己进行了一些更改。

当我尝试:

git rebase master
从我的分支

,我从directory_2中的文件中获得大量的合并冲突(超过200)。这些冲突是如何到达那里的,我不知道。我也无法知道冲突应该如何纠正,因为它们都是我从未打开的文件,并且对此一无所知。

理想情况下,我很乐意告诉git:"嘿git - 如果你在目录_2中遇到合并冲突,只需从主人那里拿走文件,不要问我关于修复它"

此时,我甚至可以接受主要的所有合并冲突,因为我的大多数工作都是使用新文件。如何通过使用master中的文件自动告诉git rebase并解决所有冲突?

1 个答案:

答案 0 :(得分:1)

你可以做的是git merge master。这将生成合并冲突。然后你可以使用一点shell魔术来完成剩下的git diff --name-only --diff-filter=U。此命令将列出所有具有冲突的文件。所以你可以做类似

的事情
$ git merge master
$ git diff --name-only --diff-filter=U | grep ^path/to/directory_2 | xargs -I% sh -c 'git checkout -f HEAD -- % && git add %'

然后你可以完成合并

或者你可以采取其他方式

$ git diff --name-only --diff-filter=U | grep ^path/to/directory_2 | xargs -I sh -c 'git checkout -f master -- % && git add %'

第一个在目录ours上执行directory_2,第二个在目录theirs上执行directory_2

此脚本执行的操作是获取所有未解决的冲突,使用grep进行过滤,以便只有directory_2中的{1}}位于列表中,然后使用xargs运行命令git checkout -f <branch: Either HEAD or master> -- <file> && git add <file>为列表中的每个文件。