强制 Git 在合并期间始终选择较新的版本?

Posted

技术标签:

【中文标题】强制 Git 在合并期间始终选择较新的版本?【英文标题】:Force Git to always choose the newer version during a merge? 【发布时间】:2012-11-15 16:06:02 【问题描述】:

假设我merge git 存在合并冲突。

我的问题是:如何强制 git 始终选择冲突代码的较新版本,这样我就不需要手动解决冲突?

【问题讨论】:

git pull from remote.. can I force it to overwrite rather than report conflicts? 的可能重复项 但我确实想做一个合并(不是覆盖提交),但还想自动解决冲突。 【参考方案1】:

看看我在Git timestamp based automated sync的回答

基本上我们必须进行手动时间戳比较。我认为git merge 没有任何内置实用程序。

【讨论】:

【参考方案2】:

我用这个,

git fetch --prune
git reset --hard origin/master

【讨论】:

当我只想用 master 分支覆盖时,这个解决方案帮助我修复了未合并的冲突。我使用 git reset --hard master(来自本地) 除非您确切知道它的作用,否则不要使用它,它是初学者放松大量工作的好方法。这根本不会合并代码,更不用说选择最新的代码了。它只是用远程仓库中的内容覆盖分支中的所有内容。这是一个非常有用的 cmd(我在修补东西后一直使用它来尝试不同的东西),但在使用它之前请确保您的本地分支中没有要保存的新代码。【参考方案3】:

它并不完全是“较新”的版本,但您可以使用 git merge branch -X ours 告诉 git 始终更喜欢当前分支上的版本,或者使用 git merge branch -X theirs 更喜欢正在合并的分支的版本。

来自man git-merge

我们的:

此选项强制通过支持我们的版本来干净地自动解决冲突的大块。与其他树不同的变化 与我方的冲突反映到合并结果上。对于二进制文件,全部内容都取自我们这边。

他们的:

这与“我们的”相反。

【讨论】:

ours- theirs!!只要说出来,您就会明白该命令的作用!我爱吉特! :D 注意:如果您已经使用过git merge branch,则需要先git merge --abort,然后才能执行此操作。 对我不起作用。它仍然中止合并。 error: The following untracked working tree files would be overwritten by merge:我什至不知道为什么这些文件首先在这个分支中,但是它们应该被覆盖,并且git拒绝。 如果它们未被跟踪,您需要先删除(或git add)它们。阅读一些关于 git clean 的内容,它可能会对您有所帮助。 运行git merge ours后,如果有冲突文件,会有日志吗?我可以跟踪git merge ours 吗?

以上是关于强制 Git 在合并期间始终选择较新的版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mergetool 期间选择整个 REMOTE 文件?

在较新的 PHP 版本中使用具有相同 CSS 选择器名称的 PHP 变量时出现问题

git - 回到某个提交 [重复]

在 IE 8 和 7 中使用较新的 CSS3 选择器的首选方法是啥?

在提取数据库中重复行的查询结果中仅选择较新的记录

Git分支合并选择