有没有一种方法可以使用checkout --ours
和解决所有文件的冲突--theirs
?我知道您可以为单个文件执行此操作,但找不到为所有文件执行此操作的方法。
有没有一种方法可以使用checkout --ours
和解决所有文件的冲突--theirs
?我知道您可以为单个文件执行此操作,但找不到为所有文件执行此操作的方法。
Answers:
只需grep通过工作目录,然后通过xargs命令发送输出即可:
grep -lr '<<<<<<<' . | xargs git checkout --ours
要么
grep -lr '<<<<<<<' . | xargs git checkout --theirs
工作原理:grep
将以.
递归方式搜索当前目录()和子目录中的每个文件(-r
标志),以查找冲突标记(字符串“ <<<<<<<<”)
在-l
或--files-with-matches
标志使grep的输出只有在string中找到的文件名。第一次匹配后扫描停止,因此每个匹配的文件仅输出一次。
然后,将匹配的文件名通过管道传递给xargs,该实用程序将通过管道传递的输入流分解为git checkout --ours
或的各个参数。--theirs
更多在此链接。
由于每次都必须在命令行中键入此命令非常不便,因此,如果您发现自己经常使用它,则为您选择的shell 创建别名可能不是一个坏主意:Bash是通常的用法。
此方法至少应在Git 2.4.x版之前有效
git diff --name-only --diff-filter=U
。
git status | grep both | awk '{print $3}' | xargs git checkout --[theirs|ours]
。如果您有大型项目,则比grepping更快。
CONFLICT (rename/rename): Rename "a.txt"->"c.txt" in branch "HEAD" rename "a.txt"->"b.txt" in "master"
git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 |xargs git checkout --[theirs|ours]
。
你可以-Xours
或-Xtheirs
用git merge
为好。所以:
git reset --hard HEAD
)git merge -Xours
或git merge -Xtheirs
)进行合并免责声明:当然,您只能选择一个选项,或者,-Xours
或者-Xtheirs
使用不同的策略,当然应该逐个文件。
我不知道是否有一种解决方法checkout
,但是老实说,我并不认为这非常有用:如果要为不同文件提供不同的解决方案,则使用checkout命令选择策略很有用,否则可以采用合并策略方法。
--theirs
或--ours
-Option。一种方法是git merge -s recursive -Xtheirs BRANCH
。
--theirs
并且--ours
git都不可用2.2.0
。我的答案不准确,或者它们在较旧的git版本中可用(此答案在IT时代相当古老)。正确的方法是-X
。我会据此进行更新
git checkout --[ours/theirs] .
只要您是所有冲突的根源,它就会做您想要的。我们/他们只影响未合并的文件,因此您不必专门grep / find / etc冲突。
error: path 'foo/bar/blah' does not have our version
。
git diff --name-only --diff-filter=U | xargs git checkout --theirs
似乎做好了工作。请注意,您必须将其安装到git repo的根目录才能实现此目的。
万一其他人想用另一个分支的内容简单地覆盖一个分支(例如master)的所有内容,则有一种更简单的方法:
git merge origin/master --strategy=ours
感谢https://stackoverflow.com/a/1295232/560114
或者换一种说法,请参见是否有“他们的”版本的“ git merge -s ours”?
git checkout --ours -- .
工作吗?所述.
装置当前目录,当从工作目录的根应用,因此,它基本上意味着整个工作目录。不确定是否可以与该--ours
标志一起使用,并且我不确定它将如何处理已删除或重命名的文件冲突。