而不是git merge origin/branch
我喜欢做git merge origin
。省略分支名称可以使自动化和创建别名更简单。
但是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>...]
对于其他存储库,我收到提交哈希。
答案 0 :(得分:2)
当您运行git merge origin
时,您隐含地说git merge origin/HEAD
,其中origin/HEAD
是您的遥控器上的默认分支。运行HEAD
时会设置git clone $repo
引用。
如果您的遥控器没有HEAD
引用,您在本地创建了存储库并将其推送到远程,在这种情况下,Git将不知道默认分支是什么(并且git fetch origin
不会设置它)。您可以通过以下方式手动设置遥控器的HEAD
参考: [1]
git remote set-head origin $branch
其中$branch
是您要设置为该遥控器默认分支的分支的名称。