我正在使用git 1.7.1与my_branch_1合作,而且我正在尝试从主人那里重新定位。我在directory_1中对自己进行了一些更改。
当我尝试:
git rebase master
从我的分支,我从directory_2中的文件中获得大量的合并冲突(超过200)。这些冲突是如何到达那里的,我不知道。我也无法知道冲突应该如何纠正,因为它们都是我从未打开的文件,并且对此一无所知。
理想情况下,我很乐意告诉git:"嘿git - 如果你在目录_2中遇到合并冲突,只需从主人那里拿走文件,不要问我关于修复它"
此时,我甚至可以接受主要的所有合并冲突,因为我的大多数工作都是使用新文件。如何通过使用master中的文件自动告诉git rebase并解决所有冲突?
答案 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>
为列表中的每个文件。