git push --set-upstream vs --set-upstream-to

时间:2017-08-09 02:57:57

标签: git push

根据此article,不推荐使用git push --set-upstream,而应使用git push --set-upstream-to

但是当我查看git push文档时,我只能找到--set-upstream,但--set-upstream-to无法找到。

--set-upstream已被弃用了吗?我应该使用--set-upstream还是--set-upstream-to

2 个答案:

答案 0 :(得分:15)

这会混淆git branchgit push

git branch命令同时包含--set-upstream--set-upstream-to,前者因Nick's answer已经给出的原因而弃用了后者。

git push命令只有-u又名--set-upstream,不带任何参数。这意味着如果推送成功,您的本地Git应该设置作为源的分支引用的上游,对应于您获得另一个Git设置的目标分支的远程跟踪分支,在许多情况下,您的刚刚在你的存储库中创建了自己的Git,因为他们的Git也刚刚创建了他们的分支。 (呼!)

也就是说,假设您已创建分支newbranch

$ git checkout -b newbranch
... work, commit, etc

并希望将其上游设置为origin/newbranch。但如果你尝试,它会失败:

$ git branch --set-upstream-to=origin/newbranch
error: the requested upstream branch 'origin/newbranch' does not exist

因为origin/newbranch 尚不存在,因为origin处的另一个git没有名为newbranch的分支。

但是,很快,您git push将您的本地newbranch添加到他们的Git中,以便他们的Git在他们的存储库中创建newbranch。现在他们有一个newbranch你的 Git会创建你的origin/newbranch来记住他们的newbranch现在你可以使用git branch --set-upstream-to,但如果git push可以自动执行此操作,那可能会很好 - 那就是git push --set-upstream,即-u,选项。

git branch --set-upstream-to相关,但不一样。

答案 1 :(得分:1)

这取决于你的git版本。 --set-upstream-to于2012年在1.7.12-1.7.13时间框架内引入。任何比这更新的版本都应该包含它。这就是承诺所说的:

commit 6183d826ba62ec94ccfcb8f6e3b8d43e3e338703
Author: Carlos Martín Nieto <cmn@elego.de>
Date:   Mon Aug 20 15:47:38 2012 +0200

branch: introduce --set-upstream-to

The existing --set-uptream option can cause confusion, as it uses the
usual branch convention of assuming a starting point of HEAD if none
is specified, causing

    git branch --set-upstream origin/master

to create a new local branch 'origin/master' that tracks the current
branch. As --set-upstream already exists, we can't simply change its
behaviour. To work around this, introduce --set-upstream-to which
accepts a compulsory argument indicating what the new upstream branch
should be and one optinal argument indicating which branch to change,
defaulting to HEAD.

The new options allows us to type

    git branch --set-upstream-to origin/master

to set the current branch's upstream to be origin's master.

我会说它并没有被弃用,但 不鼓励。我不知道是否最近被弃用了,但是git-2.7.5的git-branch(1)联机帮助页在没有警告的情况下提及它,这意味着它仍然存在并且正在进行中留在身边。你必须要小心。

编辑:抱歉, 已在提交b347d06bf097aca5effd07871adf4d0c8a7c55bd中弃用,但这些提交仅提及git-branch,而不是git-push