如果没有冲突,则在远程自动合并

时间:2014-05-15 22:21:32

标签: git merge push git-merge

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

我知道这是一个不好的做法,但我有一个特殊情况,其中外围的git repo由机器人更新

1 个答案:

答案 0 :(得分: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-idiomatic。您需要简单地推拉,直到成功为止。在实践中,这很少是一个问题,因为在最糟糕的情况下,你可以让你的同行在你完成复杂的合并/推送时推迟。

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