当我使用本地分支mybranch
时,我希望能够仅使用origin mybranch
和git push
来推送git pull
。事实上,我必须冗长地写出git push origin mybranch
和git pull origin mybranch
。如果我尝试仅使用git pull
,我会得到:
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> mybranch
如果我输入git branch --set-upstream-to=origin/mybranch mybranch
,那么它就可以了。但这几乎和以前的命令一样乏味。我可以让git做这个默认行为吗?我已经看到了类似的问题和答案倾向于建议更新版本的git这样做,但我使用的是git 2.1.3版,这是相当新的,所以它不能只是那样。
答案 0 :(得分:10)
一种可能的解决方案是将您的git推送行为修改为current
(请注意,这也会产生其他一些副作用)。您可以通过直接修改~/.gitconfig
(作为文件,假设您使用的是Linux)或执行以下命令来执行此操作:
git config --global push.default current
现在当你push
时,即使你没有明确指定,git也会自动将你当前的分支推送到一个名为同名的远程分支。此外,如果您当前的分支没有远程等效项,则会创建一个远程分支,并设置当前分支以跟踪它(与git push -u origin new_branch
相同,但只有一个git push
)。另请参阅this question详细描述git推送行为。
答案 1 :(得分:8)
这不是github,而是你的本地git,它完成了所有这些。
如果您使用mybranch
和在本地创建git checkout
,则它已在本地存储库中以origin/mybranch
存在,您只需git checkout mybranch
和您的本地git会看到origin/mybranch
存在并创建本地mybranch
,origin/mybranch
作为其上游。
另一方面,如果origin/mybranch
尚不存在且您在mybranch
或类似地方创建git checkout -b
,则无法将其设置为跟踪上游分支尚不存在(您可以配置它来跟踪该分支,但您偶尔会抱怨上游版本不存在)。
在这种特殊情况下,在第一个推送(将在上游创建分支的推送)上,您可以使用:
git push -u origin mybranch
告诉您的本地git将mybranch
推送到origin
和,完成后,将origin/mybranch
设置为{{1}的跟踪分支}}
请注意,这与运行mybranch
相同:您执行一次,然后在本地设置它,您不必再次执行此操作。它更方便,因为您可以与git branch --set-upstream-to
一起创建分支push
。但是你仍然需要记住这样做(一次;当你origin
没有git push
时,你会得到提醒。