Shi*_*ami 3 git version-control
关于如何解决有利于一个或另一个分支的合并冲突的 SO 有很多问题。但我找到的最常见的答案是使用git checkout --oursor git checkout --theirs。
问题是将从任一分支git checkout获取整个文件。文件的某些部分可能合并得很好,我们不希望它们被删除。
所以问题是:给定一个处于冲突状态的文件,是否有一种方法可以删除冲突标记以支持“我们的”或“他们的”,而无需将此策略应用于整个合并或从“我们的”中获取整个文件或“他们的”?
使用简单的脚本绝对可以做到这一点,但我想知道是否有我找不到的现有解决方案。
如果您想将文件中所有剩余的冲突解决到我们或他们的文件中,那么sed您想要的每一方和您的冲突风格都是直接的。
对于大多数代码文件,冲突标记是如此陌生,以至于您不必小心识别它们,只需键入它就很容易:
sed -si '/^<<</,/^>>>/ {/^<<</,/^===/d;/^>>>/d}' thefile # keep theirs
sed -si '/^<<</,/^>>>/ {/^<<</d;/^===/,/^>>>/d}' thefile # keep ours
Run Code Online (Sandbox Code Playgroud)
并为所有事情做到这一点,
sed -si $yourpattern $(git ls-files -m | uniq)
Run Code Online (Sandbox Code Playgroud)
最简单。
为了更加小心您的冲突标记,最好制作您提到的简单脚本,并且 diff3 冲突报告样式也需要一些更改。通常的冲突符号计数是 7,为了最好的安全,让你的 sed range /^<<<<<<< ours$/,/^>>>>>>> theirs$/,并且 diff3 报告“保留我们的”删除范围以^||||||| base$,而不是^=======$。
编辑:sed在 Mac 上已被屠杀拒绝在不创建备份文件的情况下进行内联编辑,您必须执行 eg-si.bak然后删除备份。