【问题标题】:Difference between origin master & origin/master with git pull and git push commandsgit pull 和 git push 命令在 origin master 和 origin/master 之间的区别
【发布时间】:2016-04-08 00:51:02
【问题描述】:

我是 git 新手,我对 git pull 和 git push 命令没有任何疑问。

示例:
假设我在本地机器“master”和“newbranch”(本地分支)中有两个分支。

$ git checkout newbranch

$ git 分支

  *newbranch           //Assume this is local branch only 
    master

现在下面的命令到底是做什么的?

git pull origin master -> 它将远程“master”的更改拉到“newbranch”(当前结帐本地分支)。

git pull origin/master -> 它将“本地”“master”中的最新更改拉取到“newbranch”(当前结帐本地分支)。

git push origin master -> 是否会将“newbranch”(当前结帐本地分支)中的新更改推送到“远程”“master”。

git push origin/master -> ??这个到底是做什么的?

任何人都可以澄清疑问。

                                                         Thanks in advance 

【问题讨论】:

    标签: linux git github system gitlab


    【解决方案1】:

    一般来说,这个命令的语法是:

    git push <remote> [refspec]
    

    如果省略 refspec,则简化为:

    git push <remote>
    

    它的行为取决于 git config push.default 变量中设置的内容。 git消息说:

    当 push.default 设置为 'matching' 时,git 会将本地分支推送到已经存在的同名远程分支。

    在 Git 2.0 中,Git 将默认采用更保守的“简单”行为,仅将当前分支推送到“git pull”用来更新当前分支的相应远程分支。

    设置“匹配”模式:

    git config --global push.default matching
    

    并设置“简单”模式:

    git config --global push.default simple
    

    让我们回到您的具体案例。将提交推送到名为“origin/master”的远程会失败,因为不存在“origin/master”远程(默认远程称为“origin”)。要使其正常工作,您必须手动添加此类遥控器,例如通过调用:

    git remote add origin/master <git-repository-url>
    

    但请注意,这样的操作会让你本地的git很混乱,你将不得不处理这样的错误:

    $ git push origin/master
    Counting objects: 5, done.
    Writing objects: 100% (3/3), 253 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To git@github.com:sarxos/test.git
       820474f..3706ea9  master -> master
    error: unable to resolve reference refs/remotes/origin/master/master: Not a directory
    error: Cannot lock the ref 'refs/remotes/origin/master/master'.
    

    还有一些其他的:

    $ git fetch origin/master
    error: unable to resolve reference refs/remotes/origin/master/master: Not a directory
    From github.com:sarxos/test
     ! [new branch]      master     -> origin/master/master  (unable to update local ref)
    error: some local refs could not be updated; try running
     'git remote prune origin/master' to remove any old, conflicting branches
    

    所以我不建议使用它。

    如果你想推送到 origin/master(远程名为 'origin' 和远程分支名为 'master'),你应该这样做:

    git push origin master
    

    【讨论】:

    • 所以,目前我在本地名为 (newbranch) 的新分支上。我想将更改从 newbranch (目前我正在结帐到 newbranch )直接推送到“remote master”。为此我可以直接“git push origin master”
    • Vivek,“git push origin master”被解析为“git push origin master:master”,所以它会查找本地分支“master”并将更改推送到也名为“master”的远程分支.如果您想从当前签入的分支(例如 newbranch、bubu 或其他)推送,您可以执行“git push origin HEAD:master”,这意味着:从当前分支的 HEAD 推送到远程“master”我的遥控器上的分支称为“起源”。更多详情可以查看git-scm.com/docs/git-push
    【解决方案2】:

    git pull origin mastergit pull origin/master

    它将远程master的更改拉到“newbranch”(当前结帐本地分支)。

    完全正确 - 两者都会做同样的事情
    细微的差别是origin/master 将引用存储在您的存储库中的本地副本。

    最好的做法是在拉取之前更新您的本地存储库:

    git fetch --all --prune
    

    git push origin master

    将“newbranch”(当前结帐本地分支)中的新更改推送到“远程”“master”。

    种类
    Git 会尝试将当前分支推送到远程的 master,购买是因为你在不同的分支上,然后 master(取决于你本地的 git 版本)git 不会让你这样做。

    如果分支存在于远程,它将尝试推送到相同的分支名称(跟踪的分支)并再次取决于您的 git 版本,它将推送到远程或抛出错误。


    git push origin/master

    它将推送到远程跟踪分支。
    Git 将使用origin/master 作为远程名称,并尝试将当前分支名称推送到此远程。

    如果你在 newbranch 上,它会尝试推送到名为 origin/master a b 分支名称 newbranch 的遥控器

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 1970-01-01
      • 2021-10-14
      • 2020-07-30
      • 2023-02-02
      • 2021-04-13
      • 2015-12-08
      • 2017-09-21
      相关资源
      最近更新 更多