我是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
答案 0 :(得分:2)
git pull origin master
或git pull origin/master
它会将更改从远程master
拉到“newbranch”(当前结帐本地分支)。
确实 - 两者都会做同样的事情
不同之处在于origin/master
将引用存储在存储库中的本地副本。
最佳做法是在使用以下方法更新本地存储库之前:
git fetch --all --prune
git push origin master
将“newbranch”(当前结帐本地分支)中的新更改推送到“远程”“主”。
种类,
Git会尝试将当前分支推送到远程主服务器上,因为你在不同的分支上然后掌握(取决于你本地的git版本)git不会让你这样做。
如果分支存在于远程中,它将尝试推送到相同的分支名称(被跟踪的分支),并再次依赖于它将推送到远程的git版本或将引发错误。
git push origin/master
它将推送到远程跟踪的分支
Git将使用origin/master
作为远程名称,并尝试将当前分支名称推送到此远程。
如果您在newbranch
,它会尝试推送到名为origin/master
的远程分支名称newbranch
答案 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