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他们。 所以:

  1. 中止当前的合并(例如使用git reset --hard HEAD
  2. 合并使用你喜欢的策略( git merge -Xoursgit 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仓库的根目录来达到这个目的。