为什么“git merge origin”有时会起作用

  • 本文关键字:起作用 origin merge git git
  • 更新时间 :
  • 英文 :


我喜欢做git merge origin,而不是做git merge origin/branch。省略分支名称使自动化和创建别名更加简单。

然而,git merge origin仅适用于某些存储库:

$ git branch --set-upstream-to=origin/master
$ git pull origin
Already up-to-date.
$ git merge origin
Already up-to-date.

对于其他回购有一个错误:

$ git branch --set-upstream-to=origin/master
$ git pull origin
Already up-to-date.
$ git merge origin
merge: origin - not something we can merge

请注意,语句git pull origin适用于这两个存储库


两个存储库或在同一系统上(因此运行相同版本的git)。我已经检查了.git/config,它看起来很相似。

它适用于

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@github.jasny/obfuscated-repo-1.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

它不适用于

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@github.com:legalthings/iam.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

为什么这在某些情况下有效,而在其他情况下无效?


对于不工作的回购,git rev-parse origin给出一个错误:

git rev-parse origin
origin
fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]

对于另一个存储库,我得到了一个提交哈希。

当您运行git merge origin时,您隐含地说git merge origin/HEAD,其中origin/HEAD是您远程上的默认分支。运行git clone $repo时将设置HEAD引用。

如果您的远程没有HEAD引用,则在本地创建存储库并将其推送到远程,在这种情况下,Git将不知道默认分支是什么(git fetch origin不会设置它)。您可以通过:[1]手动设置远程的HEAD参考

git remote set-head origin $branch

其中$branch是要设置为该远程的默认分支的分支的名称。

最新更新