强制如何将我本地的所有内容合并到远程主机中?

问题在于一个团队成员错误地创建了一个名为“Head”的单独分支(主分支是主分支)。 “头”有最新的代码,我现在想覆盖写入主(因为它是所有代码的最新版)。

当我尝试执行“合并头到主”我得到一个错误说“无关分支”。 我搜索了一下,发现我需要在本地拉出分支(“Head”),然后将其推送(或强制推送)到远程“主”分支以合并代码。

我使用了以下命令: git fetch && git checkout Head并将其检出(克隆)到本地。 现在,当我试图推动它显示,我是17落后,3推动改变。

强制如何将我本地的所有内容合并到远程主机中?

谢谢

SourceTree

编辑

我做了什么das-g告诉,但似乎我在远程看到的唯一变化是Head分支被删除。 原本在Head的代码更改已经消失(或丢失了!!!)。 我可以看到标签和历史记录,但似乎这些更改将永久删除!

截图:

在这里输入图像描述


这似乎从你的屏幕截图和错误消息masterHead没有任何共同的祖先。 如果我理解正确,

  • 你希望master人员拥有Head的当前内容(以及正确的内容,而不是Head的内容与master内容合并),
  • 但你希望两个分支的历史都保存在master的血统中。 (因此, git checkout master; git reset --hard Head不是一个选项。)
  • 正如VonC所建议的那样,您可以根据主人的Head承诺重新设置Head承诺,以Head的承诺将被重写的价格产生线性历史记录。

    如果你想保持Head的提交完全一样,你可以做一个有点模糊的合并:

  • 首先,确保你的本地master是最新的(从你的截图看来,这似乎不是)

    git checkout master
    git merge --ff-only origin/master
    
  • 实际的合并

    git checkout Head
    git merge --strategy ours master
    
  • 将合并提交到master

    git checkout master
    git merge --ff-only Head
    
  • 你现在可能想要摆脱这个奇怪的Head分支

    git branch -D Head
    
  • 并将所有内容(包括分支删除)放到远程仓库中

    git push origin master :Head # should not need a force-push as no commits are discarded on the remote site
    

  • 首先,不要调用分支“Head”:这与HEAD非常接近,它引用了“当前提交”。

    你可以轻松地重命名它: git branch -m Head Tip

    关于无关分支的情况,你可以尝试在主控之上挑选它:

    git checkout master
    git checkout -b tmp
    git cherry-pick Tip~2 Tip~1 Tip
    git branch -f Tip tmp
    git checkout Tip
    

    rebase --onto选项有点复杂)

    一旦本地一切正常,您可以更新远程回购中的新分支名称:

    git push origin --set-upstream Tip
    git push origin :Head
    
    链接地址: http://www.djcxy.com/p/90393.html

    上一篇: How do force merge everything i have locally into the remote master?

    下一篇: Rename merged branch name in bitbucket