我有一个问题。我有2个分支,分别是master
和my-destinations
。我对my-destinations
分支上的master
分区进行了一些更改。我承诺并将更改推送到my-destinations
分支的git仓库。
当我切换回掌握时,我提交并推送到回购的更改不存在,这是我所期待的。但是,当我切换回master
并运行git status
时,它会说master
是最新的。我原以为它会说master
是origin
后面的一个提交。
有人可以帮助我理解为什么master
与origin/master
保持同步,但没有提交更改?
答案 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)。
注意:如果master
和my-destinations
分歧,您可以合并或重新绑定以将它们重新组合在一起。在Google中查找“visual git tutorial”,您应该阅读几个很好的教程,这些教程将引导您完成这些教程。
另请注意:我建议使用Git Extensions作为一个开源GUI工具,它可以帮助您更轻松地使用GUI查看分支,提交,本地和远程的情况。它帮助我更轻松地学习Git,我总是在Visual Studio或前台的其他工具中在后台打开它。它将基本上向您显示类似于上图的内容,无论您打开什么回购,都会进行更改。