原始主人和主人之间的区别使用git pull和git push命令的origin / master

时间:2016-01-04 11:57:31

标签: linux git github system gitlab

我是git的新手我对git pull和git push命令几乎没有疑问。

示例:
            让我们假设我的本地机器有两个分支" master"和" newbranch"(当地分支机构)。

$ git checkout newbranch

$ git branch

  *newbranch           //Assume this is local branch only 
    master

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

git pull origin master - >它将从远程" master"中提取更改。 to" newbranch"(目前结账当地分行)。

git pull origin / master - >它将拉动本地'的最新变化。 "主" to" newbranch" (目前结账当地分行)。

git push origin master - >它会推动" newbranch" (目前结帐当地分行)到“远程”' "主"

git push origin / master - > ??究竟这个人做了什么?

任何人都可以澄清疑问。

                                                         Thanks in advance 

2 个答案:

答案 0 :(得分:2)

git pull origin mastergit pull origin/master

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

确实 - 两者都会做同样的事情
不同之处在于origin/master将引用存储在存储库中的本地副本。

最佳做法是在使用以下方法更新本地存储库之前:

git fetch --all --prune

git push origin master

  

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

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

如果分支存在于远程中,它将尝试推送到相同的分支名称(被跟踪的分支),并再次依赖于它将推送到远程的git版本或将引发错误。

enter image description here

git push origin/master

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

如果您在newbranch,它会尝试推送到名为origin/master的远程分支名称newbranch

enter image description here

答案 1 :(得分:0)

通常,此命令的语法为:

git push <remote> [refspec]

如果省略refspec,则简化为:

git push <remote>

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

  

当push.default设置为“匹配”时,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