尽管我尽了最大的努力去理解它,但我显然对使用git感到很恐惧。

从kernel.org获得git push


-u

--set-upstream

对于每个最新的或成功推送的分支,请添加上游(跟踪)引用,该引用由无参数git-pull(1)和其他命令使用。有关更多信息,请参见git-config(1)中的branch.<name>.merge


这里是branch.<name>.merge中的git config


branch.<name>.merge

branch.<name>.remote一起定义给定分支的上游分支。它告诉git fetch / git pull合并哪个分支,并且还可能影响git push(请参阅push.default)。当在分支<name>中时,它告诉git fetch将标记为要合并到FETCH_HEAD中的默认refspec。该值的处理方式类似于refspec的远程部分,并且必须匹配从"branch.<name>.remote"给定的从远程获取的ref。 git pull(首先调用git fetch)使用合并信息来查找默认分支进行合并。如果没有此选项,则git pull默认情况下将合并获取的第一个refspec。指定多个值以获取章鱼合并。如果您希望设置git pull以便它从本地存储库中的另一个分支合并到<name>中,则可以将branch.<name>.merge指向所需的分支,并使用特殊设置。 (一个时期)用于branch.<name>.remote。 br />
然后,我不知不觉中成功地使用以下命令将第二次提交推送到远程存储库:

git push -u origin master


但是,我错误地认为我将不得不再次推送到来自originmaster,我跑了:

git commit -m '[...]'


那是做什么的?它似乎根本没有任何作用。我是否“撤消”了git push -u origin master

评论

尽管我尽了最大努力去理解git,但是我显然对使用git感到很恐惧。 -我从来没有像现在这样完美地重塑过我。

#1 楼

关键是“无参数git-pull”。当您从分支执行git pull时,未指定源远程或分支,git会查看branch.<name>.merge设置以了解从何处提取。 git push -u为您要推送的分支设置此信息。

要查看区别,让我们使用一个新的空分支:

$ git checkout -b test


首先,我们将不添加-u进行推送:

$ git push origin test
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.test.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 "test"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.


现在如果添加-u

$ git push -u origin test
Branch test set up to track remote branch test from origin.
Everything up-to-date
$ git pull
Already up-to-date.


请注意,跟踪信息已设置,因此git pull可以按预期工作,而无需指定远程服务器或分支。

更新:奖励提示:除了git pull之外,此设置还影响git push的默认行为。如果习惯于使用-u捕获要跟踪的远程分支,建议将push.default的配置值设置为upstream

git push -u <remote> HEAD会将当前分支推送到同名分支在<remote>上(并且还设置了跟踪功能,因此您可以在之后执行git push)。


评论


git push 使事情变得明确。如果您不使用远程控制或分支,则git会退回到分支配置设置,该设置是使用git push -u为您设置的。

– dahlbyk
2011年4月18日在2:12

@dahlbyk我已将您标记为答案,但该评论多少使我感到困惑。在您的答案中,您证明了git push origin测试(没有-u)后git感到困惑。然后,您证明了git push -u origin测试消除了歧义。是否有错别字,还是我又变得很笨?

–ClosureCowboy
2011-4-18的2:30



我认为我们正在互相交谈。 :)当我说git push 明确时,我的意思是相对于依赖分支配置的git push。同样,git pull 也是明确的,并且git pull依赖于分支配置。用-u推送后,git push和git pull都将按预期工作。

– dahlbyk
2011-4-18在2:37



@dahlbyk:您的回答很好,但是在上面的评论中,您对git push重复了一个常见的误解-除非您自己设置push.default,否则git push仅使用上游分支配置来确定将哪个远程对象推送到,而不是远程分支更新。

–马克·朗伊尔(Mark Longair)
2011年4月18日在5:20

git的最佳实践是git push origin master和对另一端IE相同。 git pull origin master ..因此,如果假设分支发生变化,那么您可以git push origin branch_name并将其与另一端IE相同。 git pull origin branch_name

– Arpit Vaishnav
2012年12月3日,11:33

#2 楼

git push -u origin master


…等同于:

git push origin master ; git branch --set-upstream master origin/master


如果忘记-u,请做最后一个声明!

或者您可以强制执行以下操作:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master


如果您让命令为您执行此操作,它将像选择键入不存在的分支或您键入错误一样选择您的错误没有git remote add;尽管那可能就是您想要的。 :)

评论


BTW大师只是一个例子:)

–sabgenton
13年4月15日在14:51

好的,第二个比特现在已在以下较新版本中折旧:git branch master -u origin / master details @ stackoverflow.com/a/2286030/790359

–sabgenton
13年4月22日在23:11

如果您忘记使用-u选项,则立即输入git push -u即可。

–zeekvfu
2014年5月14日上午11:09

较新版本的git表示--setup-upstream将被弃用:--set-upstream标志已被弃用并将被删除。考虑使用--track或--set-upstream-to

– Bill Hoag
16-10-20在20:25



--set-upstream已弃用,现在可以使用:git branch --set-upstream-to = origin / master master

–阿尔贝托·佩雷斯(Alberto Perez)
19年1月25日在10:27



#3 楼

用更简单的术语:

从技术上讲,-u标志将跟踪引用添加到要推送到的上游服务器。

这里重要的是,这使您无需提供更多参数即可执行git pull。例如,一旦执行了git push -u origin master,您以后就可以调用git pull,而git将会知道您实际上是在说git pull origin master

否则,您将必须输入整个命令。

评论


因此,如果我将-u标志设置为orgin master,则每次下一次拉取都会引用它。如果我想更改git pull的行为,我应该运行git push -u origin some_other_branch,而git pull现在将引用some_other_branch?谢谢!

–托马·托莫夫(Toma Tomov)
18-09-28在8:26

我们还可以使用“ git push”代替“ git push origin master”吗?

–cegprakash
19年4月16日在14:25

是的,您可以@cegprakash。但是,您最初会做一个git push -u origin master

–AdépòjùOlúwáségun
19年4月16日在16:24

我想要一个简单的答案..我觉得这是最好的答案!!!其他人听起来太技术性,无法理解我

– Paulson Maclean
20/11/15在6:42

#4 楼

所有必要的git bash命令都可以推入并拉入Github:

git status 
git pull
git add filefullpath

git commit -m "comments for checkin file" 
git push origin branch/master
git remote -v 
git log -2 


如果要编辑文件,则:

edit filename.* 


查看所有分支及其提交:

git show-branch


评论


我认为您的回答超出了问题的范围。

–AdépòjùOlúwáségun
19年2月9日在20:02