【问题标题】:Auto merge on remote if no conflicts如果没有冲突,远程自动合并
【发布时间】:2014-05-15 22:21:31
【问题描述】:

如果没有冲突,有没有办法让推送被接受并自动合并?

我知道这是一种不好的做法,但我想到了一个特殊情况,即外围 git repo 由机器人更新

【问题讨论】:

  • 你为什么不创建一个别名来进行合并然后推送呢?
  • @OliCharlesworth 我正在推动的事情
  • @kaman 因为我不能保证虽然我会进行拉取和合并,但远程不会发生任何变化

标签: git merge push git-merge


【解决方案1】:

如果没有冲突,有没有办法让推送被接受并自动合并?

推理的流程应该反过来——你只有在尝试合并后才能知道没有冲突。当本地树和远程树发生分歧时,合并是必要的 - 并且只有在您尝试推送之后,即在您将本地树带到远程之后,在远程检测到分歧。在这种情况下,远程端的 git 通常会拒绝推送以让您解决差异 - 您最适合在客户端而不是远程端这样做。

如果您确定没有冲突,您可以信任git pull - 它在默认模式下与 FETCH_HEAD 合并。例如,

git pull --no-edit
git push

不鼓励使用--no-edit 选项,但可以通过接受默认的合并消息来避免将您转储到编辑器中。如果合并没有静默成功,您可以将两者别名为一个失败的命令,

git config alias.merge-n-push '!f() { git pull --no-edit && git push; }; f'

我不能保证虽然我会进行拉取和合并,但远程不会发生任何变化

你当然不能,git 是一个分布式版本控制系统,这种竞争是固有的,甚至是需要的。一种会以某种方式锁定远程的方法,而它会在你决定合并什么以及如何合并时来回切换,这不是 git 惯用的。你需要简单地推拉推,直到你成功。在实践中,这很少成为问题,因为在最坏的情况下,您可以要求您的同行在您完成复杂的合并/推送时推迟。

不过,您可以通过检查遥控器来缓解这种情况: How to know local repo is different from remote repo, without fetch?

【讨论】:

    猜你喜欢
    • 2013-10-26
    • 2019-06-10
    • 2020-07-25
    • 2019-08-26
    • 2019-07-25
    • 1970-01-01
    • 2011-12-16
    • 2012-04-04
    • 2012-04-19
    相关资源
    最近更新 更多