用Git和Github理解分支

时间:2017-09-25 16:19:43

标签: git github branch git-merge

我有一个问题。我有2个分支,分别是mastermy-destinations。我对my-destinations分支上的master分区进行了一些更改。我承诺并将更改推送到my-destinations分支的git仓库。

当我切换回掌握时,我提交并推送到回购的更改不存在,这是我所期待的。但是,当我切换回master并运行git status时,它会说master是最新的。我原以为它会说masterorigin后面的一个提交。

有人可以帮助我理解为什么masterorigin/master保持同步,但没有提交更改?

2 个答案:

答案 0 :(得分:1)

  

有人可以帮助我理解为什么master与origin / master保持同步,但是没有提交更改?

您的local master分支与github remote master分支具有相同的文件。这就是你的(本地)主分支不在你的(远程)主分支之后的原因。

如果其他人(或您来自任何其他远程计算机)已将新更改提交到(远程)主分支中,则您的(本地)主分支将落后(任意数量的提交)。

答案 1 :(得分:1)

您在本地仓库中向my-destinations添加了提交,而不是master

a              <-- master ref is (a)
 \
  b - c - d    <-- my-destinations ref is (d)

当您推送到远程仓库origin时,它只是占用了现有的本地master分支,并使远程仓库master保持不变。换句话说,远程master已更新为引用(a),就像您的本地master一样。如果它已经在(a),那么遥控器就没有任何变化。

您的遥控器名为origin,这是标准命名约定。因此,如果为远程master添加本地跟踪分支,它将被称为origin/master,它将在该分支发生推送后引用相同的提交:

a            <-- master (a)*  <-- origin/master (a)
 \
  b - c - d  <-- my-destinations (d)

(*) - Indicates branch that is checked out

请注意,如果在my-destinations签出时没有推送,那么origin将不会有新的提交b,c和d,除非您使用命令行标志或其他一些将所有分支推送到origin的方法。如果您确实推出了my-destinations签出,那么远程也会有b-c-d提交,并且origin/my-destinations本地跟踪参考也会指向(d)。

但最大的问题是如何让你的新提交回到master。要从master获取my-destinations的新提交,您可以git merge my-destinations选择主人,在这种情况下,只需将主人“快进”到({1}} )commit,因为master引用了my-destinations的父级(即它们没有分歧 - 你可以将abcd视为直线而不是分支)。合并后,您将拥有:

a            <-- origin/master (a)
 \
  b - c - d   <-- master (d)*  <-- my-destinations (d)

然后,在推送到远程后,origin/master将更新,以便它在提交(d)时匹配master - 即所有三个引用都将指向(d)。

注意:如果mastermy-destinations 分歧,您可以合并或重新绑定以将它们重新组合在一起。在Google中查找“visual git tutorial”,您应该阅读几个很好的教程,这些教程将引导您完成这些教程。

另请注意:我建议使用Git Extensions作为一个开源GUI工具,它可以帮助您更轻松地使用GUI查看分支,提交,本地和远程的情况。它帮助我更轻松地学习Git,我总是在Visual Studio或前台的其他工具中在后台打开它。它将基本上向您显示类似于上图的内容,无论您打开什么回购,都会进行更改。