如何将我本地的所有内容合并到远程主控器中?

时间:2015-08-01 08:32:16

标签: git merge bitbucket

问题是团队成员错误地创建了一个单独的分支(主分支是主分支),称为#34; Head"。 " HEAD"有最新的代码,我现在想要写入主页(因为它是所有代码的最新版本)。

当我尝试表演" Merge Head into master"我得到一个错误说"无关的分支"。我搜索了一下,发现我需要在本地拉出分支(" Head"),然后将其推送(或强制推)到遥控器#34; master"分支合并代码。

我使用了以下命令: git fetch && git checkout Head并将其检出(克隆)到当地。现在,当我尝试推动它时,显示我17次提交落后,3次更改推送。

如何将我本地拥有的所有内容合并到远程主控中?

由于

SourceTree

修改

我做了das-g告诉我的事情,但似乎我在远程看到的唯一变化是删除了Head分支。最初在Head中的代码更改已消失(或丢失!!!)。我可以看到标签和历史记录,但似乎永远删除了更改!!!

截图:

enter image description here

2 个答案:

答案 0 :(得分:2)

首先,不要调用分支“Head”:距离HEAD, which references the "current commit"非常近。

您可以轻松地重命名: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 option is a bit more complex

一旦在本地看起来一切正常,您就会更新远程仓库上的新分支名称:

git push origin --set-upstream Tip
git push origin :Head

答案 1 :(得分:2)

从您的屏幕截图和错误消息中可以看出masterHead没有任何共同的祖先。如果我理解正确的话,

  • 您希望master的提示的当前内容为Head完全该内容,而不是Head的内容已合并内容为master),
  • 但您希望在master的祖先中保留两个分支的历史记录。 (因此git checkout master; git reset --hard Head不是一个选项。)

你可以在主人之上修改Head提交,以VonC suggests为基础,以Head提交的价格生成线性历史记录-written。

如果你想完全保留Head的提交,你可以做一些模糊的合并:

  1. 首先,确保您的本地master是最新的(从您的屏幕截图来看,它似乎不是)

    git checkout master
    git merge --ff-only origin/master
    
  2. 实际合并

    git checkout Head
    git merge --strategy ours master
    
  3. 将合并提交获取到master

    git checkout master
    git merge --ff-only Head
    
  4. 你可能想要摆脱奇怪命名的Head分支,现在

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

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