Ram*_*hum 1364 git git-branch
我在Git中创建了一个新分支:
git branch my_branch
Run Code Online (Sandbox Code Playgroud)
推它:
git push origin my_branch
Run Code Online (Sandbox Code Playgroud)
现在说有人在服务器上做了一些更改,我想从中拉出来origin/my_branch
.我做:
git pull
Run Code Online (Sandbox Code Playgroud)
但我得到:
You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "my_branch"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
Run Code Online (Sandbox Code Playgroud)
我了解到我可以使用它:
git branch --set-upstream my_branch origin/my_branch
Run Code Online (Sandbox Code Playgroud)
但为什么我需要为我创建的每个分支执行此操作?这不是很明显,如果我推my_branch
到origin/my_branch
,然后我会想拉origin/my_branch
进my_branch
?如何使其成为默认行为?
Mar*_*air 1457
一个不依赖于记住git branch --set-upstream
1的语法的快捷方式是:
git push -u origin my_branch
Run Code Online (Sandbox Code Playgroud)
......你第一次推动那个分支.或者,将当前分支推送到同名分支(方便别名):
git push -u origin HEAD
Run Code Online (Sandbox Code Playgroud)
您只需要使用-u
一次,并origin
以相同的方式设置分支与分支之间的关联git branch --set-upstream
.
就个人而言,我认为必须明确地在分支机构和远程分支机构之间建立关联是一件好事.这只是一个耻辱的规则是不同的git push
和git pull
.
1这可能听起来很傻,但我经常忘记指定当前分支,假设它是默认值 - 它不是,结果最令人困惑:)
更新2012-10-11:显然我并不是唯一一个容易出错的人!感谢VonC指出git 1.8.0引入了更明显的git branch --set-upstream-to
,如果你在分支上,可以使用如下my_branch
:
git branch --set-upstream-to origin/my_branch
Run Code Online (Sandbox Code Playgroud)
......或者用短选项:
git branch -u origin/my_branch
Run Code Online (Sandbox Code Playgroud)
这个变化及其推理在git 1.8.0发布说明中描述,候选发布版1:
这很诱人
git branch --set-upstream origin/master
,但这告诉Git安排本地分支origin/master
与当前检出的分支集成,这是用户意味着的极不可能.该选项已弃用; 使用新的--set-upstream-to
(带有短而甜-u
)选项.
Zam*_*ith 1249
您可以通过减少输入来实现这一目标.首先,改变推送的工作方式:
git config --global push.default current
Run Code Online (Sandbox Code Playgroud)
这将推断该origin my_branch
部分,因此您可以这样做:
git push -u
Run Code Online (Sandbox Code Playgroud)
这将创建具有相同名称的远程分支并跟踪它.
Von*_*onC 117
git config --global push.autoSetupRemote true
Run Code Online (Sandbox Code Playgroud)
OP问:
我了解到我可以让它与以下内容一起使用:
Run Code Online (Sandbox Code Playgroud)git branch --set-upstream my_branch origin/my_branch
但为什么我需要为我创建的每个分支执行此操作?
您不需要一直设置上游。
不再是了(十一年后)。
在 Git 2.37(2022 年第 3 季度)中,agit config --global push.autoSetupRemote true
将为您解决这个问题。
请参阅提交 05d5775、提交 8a649be、提交 bdaf1df(2022 年 4 月 29 日),作者:Tao Klerks ( TaoK
)。
(由Junio C Hamano 合并 -- gitster
--在提交 f49c478中,2022 年 5 月 26 日)
push
: 新配置选项“push.autoSetupRemote
”支持“simple
”推送签署人:陶·克勒克斯
在某些
simple
集中式工作流程中,用户希望远程跟踪分支名称与本地分支名称相匹配。
"git push
" ( man )推送到分支的远程版本/实例,而 "git pull
" ( man )将任何更改拉取到远程分支(同一用户在另一个地方或其他用户所做的更改)。
push.default
默认选项“ ”和新选项“”支持此期望,默认选项“ ”simple
拒绝默认推送不匹配的跟踪分支名称,而新选项“”仅为同名远程分支设置远程跟踪。branch.autosetupmerge
simple
当用户创建了新分支且尚未推送(且未
push.default
设置为“current
”)时,系统会提示用户“The current branch %s has no upstream branch
”错误,并说明如何推送和添加跟踪。此错误很有帮助,因为每个分支遵循一次建议可以永远“解决”该分支的问题,但不方便的是,对于“简单”的集中式工作流程,这始终是正确的做法,因此最好只做吧。
使用新的配置设置 来支持此工作流程,
push.autoSetupRemote
当没有配置远程跟踪分支时,这将导致默认推送,以推送到远程上的同名 和--set-upstream
。
The current branch %s has no upstream branch
还添加在遇到“ ”错误时提供此新选项的提示,并添加相应的测试。
新的提示是:
要让没有跟踪
上游的分支自动发生这种情况,请参阅push.autoSetupRemote
“git help config”中的“”
git config
现在包含在其手册页中:
push.autoSetupRemote
如果设置为“
true
”,则假设--set-upstream
当前分支不存在上游跟踪时默认推送;
push.default
该选项与选项“simple
”、“upstream
”和“ ”一起生效current
。如果默认情况下您希望将新分支推送到默认远程(如“
push.default=current
”的行为)并且还希望设置上游跟踪,那么它非常有用。
最有可能从此选项中受益的工作流是“simple
”中央工作流,其中所有分支都应在远程具有相同的名称。
cdu*_*001 85
你可以简单
git checkout -b my-branch origin/whatever
Run Code Online (Sandbox Code Playgroud)
首先.如果您设置branch.autosetupmerge
或branch.autosetuprebase
(我最喜欢)为always
(默认为true
),my-branch
将自动跟踪origin/whatever
.
见git help config
.
Tze*_*zen 78
您可以通过两种方式设置上游更简单.首先,当您创建分支时:
git branch -u origin/my-branch
Run Code Online (Sandbox Code Playgroud)
或者在创建分支后,可以使用此命令.
git push -u origin my-branch
Run Code Online (Sandbox Code Playgroud)
您还可以在单个命令中分支,检出和设置上游:
git checkout -b my-branch -t origin/my-branch
Run Code Online (Sandbox Code Playgroud)
我个人倾向于通过两步命令执行此操作:
git checkout -b my-branch
git push -u origin my-branch
Run Code Online (Sandbox Code Playgroud)
Tam*_*lyn 62
这是我最常用的The Fuck.
$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
$ fuck
git push --set-upstream origin master [enter/?/?/ctrl+c]
Counting objects: 9, done.
...
Run Code Online (Sandbox Code Playgroud)
此外,在终端中输入脏话词也很有趣.
Dan*_*iel 44
您可以使用:
git config --global branch.autosetupmerge总是
每次创建或签出新分支时都会链接上游分支.
请参阅https://felipec.wordpress.com/2013/09/01/advanced-git-concepts-the-upstream-tracking-branch/
这也适用于autosetuprebase,如果您遵循更多关于rebase的工作流程,但除非您知道自己在做什么,否则不要使用它,因为它会将您的拉动行为默认为rebase,这可能会导致奇怪的结果.
dja*_*ski 37
顺便说一下,将当前分支推送到具有相同名称的远程的快捷方式:
$ git push -u origin HEAD
Run Code Online (Sandbox Code Playgroud)
Amr*_*tha 19
我个人在bash中使用以下别名
在〜/ .gitconfig文件中
[alias]
pushup = "!git push --set-upstream origin $(git symbolic-ref --short HEAD)"
Run Code Online (Sandbox Code Playgroud)
并在〜/ .basehrc或〜/ .zshrc文件中
alias gpo="git pushup"
alias gpof="gpo -f"
alias gf="git fetch"
alias gp="git pull"
Run Code Online (Sandbox Code Playgroud)
you*_*rrr 16
如果以下方法不起作用:
git config --global push.default current
Run Code Online (Sandbox Code Playgroud)
您还应该更新项目的本地配置,因为您的项目可能具有本地git配置:
git config --local push.default current
Run Code Online (Sandbox Code Playgroud)
小智 11
git branch --set-upstream-to=origin/master<branch_name>
Run Code Online (Sandbox Code Playgroud)
mat*_*lar 10
对于它的价值,如果你试图跟踪遥控器上已存在的分支(例如origin/somebranch)但尚未在本地检查它,你可以这样做:
$ git checkout --track origin/somebranch
Run Code Online (Sandbox Code Playgroud)
注意:' - t'是'--track'选项的缩短版本.
这样即可立即建立相同的关联.
你也可以明确地告诉git pull要拉什么远程分支(正如它在错误信息中提到的那样):
git pull <remote-name> <remote-branch>
但要注意这一点:如果你在一个不同的分支上做一个明确的拉动,你拉的refspec将被合并到你所在的分支中!
我使用这个Git别名而不是每次都复制/粘贴Git的建议:https://gist.github.com/ekilah/88a880c84a50b73bd306
下面复制的来源(将其添加到您的~/.gitconfig
文件中):
[alias]
pushup = "!gitbranchname() { git symbolic-ref --short HEAD; }; gitpushupstream() { git push --set-upstream origin `gitbranchname`; }; gitpushupstream"
Run Code Online (Sandbox Code Playgroud)
你可以设置一个非常好的别名来处理这个,而不需要过于冗长的语法.
我有以下别名~/.gitconfig
:
po = "!git push -u origin \"$(git rev-parse --abbrev-ref HEAD)\""
Run Code Online (Sandbox Code Playgroud)
在新分支上提交后,只需键入命令即可推送新分支:
git po
Run Code Online (Sandbox Code Playgroud)
我做了与许多其他用户类似的事情,但想将其作为替代方案分享,因为我没有看到其他人发布此内容。
alias gpu='git push --set-upstream origin $(git branch --show-current)'
Run Code Online (Sandbox Code Playgroud)
(oh-my-zsh 已经有一个 GPU 别名,因此在 .oh-my-zsh/plugins/git/git.plugin.zsh 中进行了编辑)
对于那些寻找与 一起使用的别名的人git pull
,这就是我使用的:
alias up="git branch | awk '/^\\* / { print \$2 }' | xargs -I {} git branch --set-upstream-to=origin/{} {}"
Run Code Online (Sandbox Code Playgroud)
现在每当你得到:
$ git pull
There is no tracking information for the current branch.
...
Run Code Online (Sandbox Code Playgroud)
赶紧跑:
$ up
Branch my_branch set up to track remote branch my_branch from origin.
$ git pull
Run Code Online (Sandbox Code Playgroud)
你可以走了
在 git2.37.0
或更新版本中,您可以告诉 git 自动设置远程。这是用完成的
git config --global --add --bool push.autoSetupRemote true
Run Code Online (Sandbox Code Playgroud)
然后你就可以写了git push
,它会推送到默认的远程。
归档时间: |
|
查看次数: |
934712 次 |
最近记录: |