【问题标题】:Why is git push work differently than git push origin <branch>? [duplicate]为什么 git push 的工作方式与 git push origin <branch> 不同? [复制]
【发布时间】:2017-11-14 13:02:26
【问题描述】:

为什么这两个命令会产生这些结果:

  1. (主节点已签出) git checkout 测试版 git推送

  2. (测试版已签出) git push origin beta

我问是因为前者在 AWS CodeCommit 中导致错误 (403),而后者推送到分支就好了。此外,每当我签出 beta 版时,我会收到一条警告,提示我在 origin 分支之前提交了 +20:

“您的分支领先于 'codecommit-origin/beta' 38 次提交。”

【问题讨论】:

  • 这个问题的原因是因为我checkout到master的时候remote URL是正确的,但是当我checkout to beta的时候remote URL变成了http版本的URL,不是正确的 ssh 版本。更正 URL (git remote set-url --push ) 解决了这个问题,并让我相信远程的 URL 取决于签出的分支,使得第一个场景和第二个场景不同。

标签: git aws-codecommit


【解决方案1】:

注意:此答案一般适用于 git push,而不适用于带有 AWS 的 git

git push 接受您要发送代码(来源)的参数,以及您从中发送代码的分支。因此,如果您在许多代码示例中看到,git push origin master 会将代码从您的 master 分支推送到 origin。如果输入命令git push origin beta,则从本地beta 分支推送到远程origin 存储库的beta 分支。 git checkout 是一个切换您当前正在工作的分支的命令。因此,git checkout beta 将您的本地存储库切换到 beta branch,如果您进行更改并提交它们(确保在切换分支之前提交!)它们只会在beta 分支中改变。同样,git checkout master 切换到您的主分支。您从哪个分支运行 git push 并不重要,因为您指定要推送哪个分支作为第二个参数。

【讨论】:

  • 为什么要输入“origin”参数?为什么我不能使用“git push beta”而不是“git push origin beta”?除了原点,有没有办法推到其他地方?
【解决方案2】:

这与您的 git config push.default 设置有关。要查看您的设置运行:

$ git config -l

(请记住,您可以有 3 种不同的 git 设置:全局、系统、本地。使用 --global --system--local 运行上述命令以查看为每个设置设置的值。)

如果你只使用git push,但没有指定哪里你推送到,git 将使用push.default 设置的规则。为避免意外行为,请始终保持详细并指定要推送到的位置,即:git push origin beta

git push.default documentation

【讨论】:

    猜你喜欢
    • 2018-07-05
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    相关资源
    最近更新 更多