【问题标题】:How to force merge two remote branches locally?如何在本地强制合并两个远程分支?
【发布时间】:2021-04-22 22:23:54
【问题描述】:

我正在尝试将我的本地分支从不同的存储库合并到我的上游代码。我想在我的开发系统中将priv/dev 分支合并到origin/master。我想将我的更改优先于原始主机。但是它失败了,我的代码有错误吗?

git clone https://github.com/production public_code
cd public_code
git remote add priv https://gitlab.com/tmv/development
git merge -Xours priv/dev origin/master

输出

error: Merging is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.

【问题讨论】:

  • 没有“强制合并”之类的东西。这些命令失败时会出现什么错误?
  • 明白,改了描述
  • “失败”是什么意思?运行这些命令后会发生什么?
  • 输出为自动合并失败;修复冲突,然后提交结果。
  • 问题是您正在将两个远程跟踪分支合并到本地主服务器中。我认为这不是你想要的。

标签: git git-merge git-remote


【解决方案1】:

由于您只是克隆了一个 repo,因此您只需要进行常规合并:

git clone https://github.com/production public_code
cd public_code
git remote add priv https://gitlab.com/tmv/development
git merge -Xtheirs priv/dev
git push origin HEAD

克隆后,master 分支已经被检出,并且你已经拥有了 master 中的最新版本。

【讨论】:

  • 除了应该是-Xtheirs,因为priv/dev应该优先。
  • @j6t 然后有了这个改变,格雷格的回答应该给你想要的。但是,我想告诫不要盲目地接受一方或另一方。相反,您应该直观地检查合并冲突并接受适当的内容,可能进行编辑以确保代码执行应有的操作。盲目地接受-Xours-Xtheirs 是解决bug 的捷径。
  • @j6t:错过了那一点。答案已更新。
  • @Code-Apprentice 你是绝对正确的。但是,从问题中可以明显看出,OP 想要冒险。
  • @j6t 我的错...我以为你是 OP。
【解决方案2】:

git merge 将当前本地分支与您在命令行中提供的任何分支合并。你不能真正合并上游分支。因此,在您的示例中,您将 priv/devorigin/master 合并到本地 master 分支中。相反,您需要合并这些分支的本地副本,然后将最终结果推送到上游仓库:

git clone <repo URL>
cd <repo dir>
git checkout <branch you want to merge into>
git merge <branch you want to merge>
git push

【讨论】:

    猜你喜欢
    • 2018-12-20
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2011-11-04
    • 2012-01-02
    • 2014-07-31
    相关资源
    最近更新 更多