2017-08-02 122 views
1

我有一个关于创建分支问题:的Git,你的分支进取“的由来/主”由1提交

首先,我从产地/主创建一个分支

$ git checkout -b dev origin/master 
$ git push origin dev 

后修改文件,那么

$ git add . 
$ git commit -m "add ii" 
$ git status 
On branch dev 
Your branch is ahead of 'origin/master' by 1 commit. 
    (use "git push" to publish your local commits) 
nothing to commit, working directory clean 

$ git push origin dev 
$ git status 
On branch dev 
Your branch is ahead of 'origin/master' by 1 commit. 
    (use "git push" to publish your local commits) 
nothing to commit, working directory clean 

我发现原产地/ dev也有提交日志什么是添加ii。

为什么git会提示消息什么是您的分支在1个提交之前在'origin/master'之前?

回答

1

通过迄今为止你所做的一切运行:

假设你有一个主分支远程回购: git checkout -b dev origin/master将创建一个名为dev地方分支机构的基础上,origin/master,并跟踪origin/master分支。 您可以通过使用git branch -vv 确认正在跟踪的分支(上游分支),它会给你一些输出,看起来像:

dev  <commit> [origin/master] <message> 
master <commit> [origin/master] <message> 

注意,在方括号中的那部分显示了上游分支,这是git用来决定你的本地分支是否与你的远程分支同步的东西。这可能是混淆来自的地方。

然后,您运行git push origin dev,这会将您当前的本地分支推送到远程服务器上名为dev的分支。 如果验证了这一点与git branch -r查看远程分支机构,你可能会看到:

origin/dev 
origin/master 

然后您创造了dev分支的额外承诺,并再次运行git push origin dev,这推动了遥控器上的更改dev branch服务器。

当您运行git status,git会当地分行dev比较的远程分支被跟踪(origin/master),因为origin/master没有改变,它仍然是1提交您的当前dev分支(和origin/dev)背后/变化,因此消息。

我怀疑你想要做的是改变你的本地dev分支来跟踪远程dev分支。这在其他答案中有更详细的介绍,但总之,您可以运行git branch --set-upstream-to=origin/dev。或者,您可以将--set-upstream附加到您的推送命令:git push origin dev --set-upstream

+1

我明白了。根据你的解释,我解决了这个问题。谢谢! – gao

+0

很高兴听到,祝你好运= D – Chris

0

考虑到,你从主分支建立帐户,并已出版了分支:

git push origin dev 

看来你仍然在Dev分支和消息只是最高审计机关,你的当前状态(在Dev分支)在一次提交之前领先于主人。没有更多的信息,从我的角度来看,这是正确的,因为您的提交并未在原始/主机中执行,而是在“dev”分支中执行,因此您的分支随着消息的提前而行。

[编辑]

变化再次掌握并从“开发”分支合并发布在主的变化:

git checkout master 
git merge dev 
0

这里有一个分支发展师父创建。所以Master分支是父母,Develop是孩子。

所以,当你在你的分支进行开发。它将历史与作为主人的父母进行比较。它可以让你知道你的分支在前面是一个提交更多的是你的分支的主人。

一旦你将开发分支与主人合并,它不会告诉你这个.. CZ现在你的父分支包含所有的提交。

1

TL; DR:运行git branch --set-upstream-to=origin/dev

您看到该消息,因为你有你的dev分支设置为origin/masterupstream。您成功从本地dev分支推送到origin/dev,但您的本地开发上游仍然设置为origin/master。你可以认为该消息为:

Your branch is ahead of '<upstream-of-current-branch>' by 1 commit. 

你可能想设置你的上游原产地的/ dev,像这样:

git branch --set-upstream-to=origin/dev 

然后,当你运行git status则应该看到这一点:

On branch dev <----------------------------------- your local, current branch 
Your branch is up-to-date with 'origin/dev'. <---- upstream is up-to-date 
nothing to commit, working tree clean <----------- local branch is up-to-date 

要同步主,我会建议你通过Github或任何git回购服务托管您的远程回购。通过该服务,create a pull request然后你/你的团队中的相关人员可以accept the pull request,这将带领掌握最新。