繁体   English   中英

使用 Git 和 Github 了解分支

[英]Understanding Branching with Git and Github

我有一个问题。 我有 2 个分支,分别是mastermy-destinations 我在my-destinations分支上做了一些不在master上的更改。 我提交并将更改从my-destinations分支推送到我的 git 存储库。

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

有人能帮我理解为什么master是最新的origin/master ,但没有提交的更改吗?

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

您的local master分支与github remote master分支具有相同的文件。 这就是为什么您的(本地)主分支不在您的(远程)主分支后面。

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

您在本地存储库中添加了对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进行推送,那么远程也会有 bcd 提交,以及也指向 (d) 的origin/my-destinations本地跟踪引用。

但最大的问题是如何让你的新提交回到master 为了让你从my-destinationsmaster提交新的提交,你可以git merge my-destinations和 master 检出,在这种情况下,这只会“快进” master 到 (d) 提交,因为master是引用my-destinations的父节点(即它们没有发散 - 您可以将 abcd 视为直线而不是分支)。 合并后,您将拥有:

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

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


注意:如果mastermy-destinations出现分歧,您可以合并或变基以将它们重新组合在一起。 在 Google 中查找“可视化 git 教程”,您应该会看到几个很好的教程,它们将引导您完成这些教程。

另请注意:我推荐 Git Extensions 作为开源 GUI 工具,它可以帮助您使用 GUI 更轻松地准确查看分支、提交、本地和远程的情况。 它帮助我更轻松地学习 Git,在前台使用 Visual Studio 或其他工具时,我总是在后台打开它。 随着更改的进行,它基本上会针对您打开的任何存储库向您显示类似于上图的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM