Git使用–ours / – 他们的所有文件来解决冲突
有办法解决冲突的所有文件使用结账 – --ours
和--theirs
? 我知道你可以做到个人文件,但无法find一个办法。
只需grep通过工作目录,并通过xargs命令发送输出:
grep -lr '<<<<<<<' . | xargs git checkout --ours
要么
grep -lr '<<<<<<<' . | xargs git checkout --theirs
这是如何工作的: grep
将遍历当前目录( .
)和子目录中的每个文件( -r
标志)来查找冲突标记(string“<<<<<<<”)
-l
或--files-with-matches
标志会导致grep只输出find该string的文件名。 首次匹配后扫描停止,因此每个匹配的文件只输出一次。
然后将匹配的文件名传送给xargs ,这是一个将pipe道inputstream分解成单个参数的实用程序,用于git checkout --ours
或 – --theirs
更多在此链接 。
因为每次在命令行都input这个信息会非常不方便,如果你发现自己使用了很多,为你的shell创build一个别名可能不是一个坏主意: Bash是通常的。
这个方法至less应该通过Git 2.4.x版本
你可以使用git merge
,也可以-Xours
或-Xtheirs
他们。 所以:
- 中止当前的合并(例如使用
git reset --hard HEAD
) - 合并使用你喜欢的策略(
git merge -Xours
或git merge -Xtheirs
)
免责声明:当然,你可以select只有一个选项,要么-Xours
或-Xtheirs
,使用不同的策略,你当然应该逐个档案。
我不知道是否有checkout
的方法,但我不认为这是非常有用的:如果你想为不同的文件提供不同的解决scheme,select使用checkout命令的策略是有用的,否则只是采取合并策略的方法。
git checkout --[ours/theirs] .
只要你是所有冲突的根源,就会做你想做的事。 我们/他们只影响未合并的文件,所以你不应该特别是grep / find / etc冲突。
git diff --name-only --diff-filter=U | xargs git checkout --theirs
似乎做这个工作。 请注意,你必须cd到git仓库的根目录来达到这个目的。