【问题标题】:Git rebase and git mergegit rebase 和 git 合并
【发布时间】:2014-03-31 15:38:21
【问题描述】:

我了解如果我有一个准备好与远程 master 合并的分支,我需要这样做:

  1. git checkout '我的分支'

  2. git rebase master(rebase 因为我想要简单的历史 + 我的更改微不足道,足以做到这一点)。但它将与我的本地 master 一起变基,而不是与 origin master 一起变基,对吗?

  3. git checkout master

  4. git merge 'my branch' - 这将进行快进合并并完成该过程。

但是如何与远程主机进行相同的合并?我在互联网上没有看到任何明确的解释。我不能只在 3d 步骤上对 origin master 结帐。 我错过了什么?

【问题讨论】:

    标签: git git-branch git-merge


    【解决方案1】:

    远程主机是远程仓库标识为master 的任何东西。每当您从origin 远程获取时,git 标记远程的master 提交为您的origin/master(在您的remotes 参考中)。

    更新远程 repo 的 refs 的方法是推送到它(它还会发送任何提交或任何其他需要的内容)。所以:

    git checkout master       # or however you want to get `master` current with origin
    git pull                  # ...
    git checkout mybranch
    git rebase master
    git checkout -B master    # you know it's going to --ff, so just move the ref
                              # or, you could `git checkout master; git merge mybranch`
    git push origin master    # push the new commits to the remote's `master`
    

    【讨论】:

    • 所以,无论我做什么,我都需要 'git push origin master' 将所有内容应用到远程存储库,对吗?有没有可能发生冲突?
    • 差不多就是这样。 (编辑:“几乎”是我非常正确;你也可以在远程仓库中从你的仓库中获取——如果遥控器实际上是同事的,这并不像你想象的那么不寻常。存储库之间的任何层次结构都是 完全传统。)
    • 不,除非其他人同时推送到远程的主控,否则不可能发生冲突。
    • 谢谢。不要以为我不赞成你,因为我很粗鲁。我只是没有赢得足够的声誉,根本无法投票。
    【解决方案2】:

    您可以像这样简单地在原始主机之上重新设置基准

    git rebase origin/master
    

    您也可以跳过第 3 步和第 4 步

    git push origin my_branch:master
    

    【讨论】:

    • 我应该像第 4 步那样在 git rebase origin/master 之后进行 ff 合并吗?如果是,那么具体如何?
    • 你的第二个建议不符合远程仓库所有者的要求,所以我需要通过rebase来做
    • 我无法想象,存储库所有者可以控制您的本地分支命名。通过执行git rebase origin/master,您可以确保在服务器端进行快进合并。将您的 my_branch 直接推送到 origin/master 非常好,并且仍然会产生线性历史记录。
    • 现在我明白你的意思了。基本上,最终的历史看起来是一样的,没有任何迹象表明它是如何完成的。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2018-07-15
    • 2011-12-16
    • 2021-08-18
    • 1970-01-01
    • 2017-12-25
    相关资源
    最近更新 更多