我喜欢做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
是要设置为该远程的默认分支的分支的名称。