【问题标题】:Git: Merge a Remote branch locallyGit:在本地合并远程分支
【发布时间】:2014-03-06 05:57:31
【问题描述】:

我已通过git fetch --all 拉出所有远程分支。我可以看到我想通过git branch -a 合并的分支作为远程/原点/分支名称。问题是它无法访问。我无法合并或结帐。

【问题讨论】:

    标签: git repository branch git-branch


    【解决方案1】:

    您可以使用远程名称引用那些远程跟踪分支〜(以git branch -r 列出)。

    你需要获取远程分支:

    git fetch origin aRemoteBranch
    

    如果您想在本地分支上合并这些远程分支之一:

    git checkout aLocalBranch
    git merge origin/aRemoteBranch
    

    注意 1: 对于历史悠久的大型 repo,您​​需要在使用 git fetch 时添加 --depth=1 选项。

    注意 2: 这些命令也适用于其他远程存储库,因此如果您正在使用 fork,则可以设置 originupstream

    注 3user3265569 建议使用以下别名 in the comments

    aLocalBranch 运行git combine remoteBranch
    别名:

    combine = !git fetch origin ${1} && git merge origin/${1}
    

    相反的场景:如果你想将一个本地分支合并到一个远程分支上(而不是一个远程分支到一个本地分支,如上图所示),你需要创建一个new首先在所述远程分支之上的本地分支:

    git checkout -b myBranch origin/aBranch
    git merge anotherLocalBranch
    

    这里的想法是将“您的本地分支之一”(此处为 anotherLocalBranch)合并到远程分支(origin/aBranch)。
    为此,您首先创建“myBranch”作为代表该远程分支:即git checkout -b myBranch origin/aBranch 部分。
    然后你可以将anotherLocalBranch合并到它(到myBranch)。

    【讨论】:

    • 本地分支?那是错字吗?我猜你是想再写一次“myBranch”?
    • @knocte 否:“如果您想将本地分支之一合并到这些远程分支之一”:我正在将“aLocalBranch”合并到“myBranch”和“@987654342” @" 代表远程分支origin/aBranch.
    • 很抱歉打扰您@VonC,在您之前的评论中您说aLocalBranch 不是错字,但您批准了最新的编辑(2 年后!),它更正了这个“可能的错字”。在撤消编辑之前,我想与您确认一下。
    • @rath 你是对的:看来我可能有点仓促地审查了该编辑,接近粗心。我确实编辑了答案以澄清第二个合并案例:你能告诉我现在是否更清楚了吗?
    • 我为此创建了一个别名。从aLocalBranch 运行git combine remoteBranch。别名:combine = !git fetch origin ${1} && git merge origin/${1}
    【解决方案2】:

    也许你想跟踪本地分支的远程分支:

    1. 创建一个新的本地分支:
      git branch -b new-local-branch
    
    1. 设置这个新创建的分支来跟踪远程分支:
      git branch --set-upstream-to=origin/remote-branch new-local-branch
    
    1. 进入这个分支:
      git checkout new-local-branch
    
    1. 将远程分支的所有内容拉入本地分支:
      git pull
    

    【讨论】:

      【解决方案3】:

      首先从原点获取远程分支。

      git fetch origin remote_branch_name
      

      将远程分支合并到本地分支

      git merge origin/remote_branch_name
      

      【讨论】:

      • 当接受的答案报告不是我们可以合并的东西时,这对我有用。就我而言,我是从另一个用户在 GitHub 上的 repo 分支中合并的。
      • 是否需要第一个命令获取? 'git merge origin/remote_branch_name' 是否从远程分支读取,而不是从本地读取。所以我不应该关心,本地分支是否更新了?
      • @MichaelFreidgeim 您确实需要先获取,以便您的本地存储库知道远程的状态。 Git pull 基本上是从当前分支的当前远程版本获取和合并,但现在您从不同的分支获取和合并。 stackoverflow.com/questions/292357/…
      【解决方案4】:

      如果您已经获取远程分支并执行git branch -a
      你会得到类似的东西:

      * 8.0
        xxx
        remotes/origin/xxx
        remotes/origin/8.0
        remotes/origin/HEAD -> origin/8.0
        remotes/rep_mirror/8.0
      

      之后,您可以使用rep_mirror/8.0 在本地指定您的远程分支。

      诀窍是 remotes/rep_mirror/8.0 不起作用,但 rep_mirror/8.0 起作用。

      所以,像git merge -m "my msg" rep_mirror/8.0 这样的命令会进行合并。

      (注意:这是对@VonC 答案的评论。我把它作为另一个答案,因为代码块不适合评论格式)

      【讨论】:

        【解决方案5】:

        每当我进行合并时,我都会进入我想要合并的分支(例如“git checkout branch-i-am-working-in”),然后执行以下操作:

        git merge origin/branch-i-want-to-merge-from

        【讨论】:

        • 我猜你必须先做一个git fetch origin/branch-i-want-to-merge-from,对吧?
        • git fetch origin develop 后跟git merge origin/develop
        • @Olivier 你是对的,这是正确的做法。 git merge 一个人做不到。
        • 感谢您巧妙的命名约定,帮助我理解
        • @Akira 不是git add . -> git commit -m <message> -> git push -u origin <branch>?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 2013-11-21
        • 1970-01-01
        • 2011-12-18
        • 2018-05-08
        • 1970-01-01
        • 2013-05-23
        相关资源
        最近更新 更多