【问题标题】:What's the difference between "git merge foo" and "git merge origin/foo"? [duplicate]“git merge foo”和“git merge origin/foo”有什么区别? [复制]
【发布时间】:2021-03-19 16:16:52
【问题描述】:

两者有什么区别:

(master) ~ $ git merge foo

(master) ~ $ git merge origin/foo

当我做第一个时,它告诉我“已经是最新的”,第二个时,我得到了一堆更新和评论,以保存在我的默认编辑器 (vim) 中。就像它是两个不同的分支一样。但如果我这样做git branch -r,我有:

  origin/dev
  origin/foo
  origin/master

如果我选择git branch,我有:

* dev
  foo
  master

我对@9​​87654328@ 前缀有点困惑。

【问题讨论】:

  • origin 是远程仓库的通用名称,您可以在本地或远程仓库中有分支。
  • foo 是您可以工作的本地,origin/foo 是远程跟踪分支(在源上跟踪 foo)。
  • origin/foo - 通常是远程分支; foo - 是本地分支。
  • 这能回答你的问题吗? git merge origin/branch vs. merge branch locally
  • 值得一提的是,所有git merge 操作都使用commit(通过其哈希ID 找到)。尝试运行git rev-parse foo,然后运行git rev-parse origin/foo;这可能会提供启发。

标签: git


【解决方案1】:

命令:

git merge foo

表示将名为foo本地 分支合并到当前签出的分支中。 “本地”是指您可能一直在其上工作的 foo 分支的本地版本。

命令:

git merge origin/foo

表示将名为origin/foo 的远程跟踪分支合并到当前签出的分支中。 fooorigin/foo 可能指向同一个提交,也可能不是。例如,如果您最近获取过,那么origin/foo 可能(甚至很可能)比您计算机上的本地 foo 更新。

顺便说一句,如果您想知道远程跟踪分支的用途是什么,这些分支是您机器上的本地分支,它们作为存储库中真正远程分支的代理存在。 Git 操作主要在本地操作,这种分布式支持是 Git 强大的原因之一。

有关附加信息,假设您想将本地 foo 分支推送到远程,通过:

git push origin foo

在这种情况下,origin 实际上是指远程 Git 存储库(例如 GitHub 或 Bitbucket),foo 是指您要推送的本地分支。

【讨论】:

  • “foo 和 origin/foo 可能指向同一个分支” 不,它们是不同的分支。他们可能指向同一个 commit
  • @matt 是的......你说得对,我改变了措辞。
【解决方案2】:

当您执行git merge foo 时,您会尝试与本地分支合并,因此它已经是最新的。

当您执行git merge origin/foo 时,您会尝试从远程分支合并。

【讨论】:

    【解决方案3】:

    git merge origin/foo 会将远程分支合并到您当前的本地活动分支中。 通常的工作流程是将本地分支合并到本地分支中。因此,请执行以下操作:

    git checkout foo - 会切换到本地foo 分支;

    git pull origin - 如果foo 分支跟踪远程origin/foo 分支 - 它会将所有远程更新拉到本地分支;

    git checkout master - 切换到本地master;

    git merge foo - 最后你会将foo 分支合并到master

    【讨论】:

      猜你喜欢
      • 2018-07-05
      • 2016-11-10
      • 2012-02-22
      • 1970-01-01
      • 2013-05-15
      • 2014-03-12
      • 2015-10-26
      • 2012-07-29
      相关资源
      最近更新 更多