Git使分支变得容易。来自其他版本控制系统的工作流程并不总是那么容易理解。这是我在使用Tortoise Git时发现的效果。
作为TortoiseGit的用户,在处理远程分支时,我总是有点困惑。与许多未分发的版本控制系统相比,Git使分支机构的工作变得非常简单快捷,但是来自TFS或SubVersion的世界,其中分支基本上是一个物理目录,可以在Git中签入和签出它几乎只是一个指针。这意味着每个存储库和工作流的分支对于将本地分支推送到远程存储库时是唯一的,或者相反,有点不同。
使用控制台处理分支的文档非常好,但是当我使用TortoiseGit时,我经常在处理远程分支时感到困惑和不安全。因此我决定进行一些研究和实验,并记录似乎有效的工作流程。
创建本地分支
鉴于我们已经创建了一个本地存储库并添加了一个远程存储库,在我的情况下是一个GitHub存储库,我们可以通过右键单击存储库中的目录并选择Create Branch菜单项来创建本地分支。
然后,我们进入Create Branch对话框,在其中输入分支的名称并单击OK。
除非我们没有在Create Branch对话框中选中“切换到新分支”复选框,否则我们的工作目录仍然是主分支。要切换到新创建的分支,我们右键单击并选择Switch / Checkout菜单项。
在下面的对话框中,我们选择新创建的本地分支并单击OK。
我们的工作目录现在是新创建的分支(在我的例子中是“branch1”)。我们现在可以进行一些更改并将它们提交到本地分支。这反映在TortoiseGit右键菜单中的Commit菜单项中。
将本地分支推送到新的远程分支(在GitHub上)
当我们想要与其他人共享我们的本地分支,或者将其存储在远程存储库中以备份它或者能够从我们需要推送的另一台计算机中检索它时。对我而言,这有点令人困惑,因为推送它并不意味着将实际分支推送到远程存储库,而是在远程存储库中创建新分支并推送更改。为此,我们使用Push右键单击菜单选项,就像我们在master分支中工作一样。
在下面的Push对话框中,我们只需点击OK即可。
这是让我最困惑的部分之一。我一直想知道这是否意味着本地分支中的更改不会被推送到远程存储库中的主分支。但是击中后确定看着Git的命令进度对话框中我们可以看到,TortoiseGit推动本地分行的一个分支,在它还不存在,这将随后被创建的远程存储库相同的名称。
将分支推送到GitHub后(如果这是我们的远程存储库所在的位置),我们可以看到它并使用页面右侧的分支按钮切换到它。
在进行了一些我们已经提交给本地分支的更改之后,我们可以使用相同的工作流将它们推送到相应的远程分支。
正如我们在“命令进度”对话框中看到的那样,本地分支中的更改将被推送到相应的远程分支。
获取远程分支
当其他人想从远程存储库中获取新分支时,我们自己切换到另一台计算机或本地存储库后,需要从远程存储库中获取新分支。有人可能认为这涉及首先创建一个新的本地分支,然后从远程分支拉出,但根据我的研究,这不是一个好主意。相反,我们想要做的是基于远程分支创建一个新的本地分支。我们首先选择Create Branch右键菜单选项来完成此操作。
在Create Branch对话框中,我们可以根据需要命名我们的新分支,但为了避免混淆,我们很可能希望为它指定与远程分支相同的名称。然后诀窍是检查Base on / Branch单选按钮并选择远程分支。
点击OK后,我们得到一个确认信息,即已创建新的本地分支并且它跟踪远程分支。就像之前我们还需要检查“切换到新分支”复选框或手动签出新分支以便开始工作。
在将更改提交到本地分支后,我们可以使用“推送”右键单击菜单选项将更改推送到远程分支。但是,我们需要确保在“推送”对话框的“远程”下拉列表中选择了正确的分支。
合并
一旦我们想要将分支中的更改合并到主分支中,我们使用Checkout / Switch右键单击菜单选项检出主分支。
然后我们使用Merge右键菜单选项...
...打开我们选择从本地分支合并的Merge对话框。
完成合并后,我们可以将更改(合并)从本地主服务器推送到远程主服务器分支。
然后远程存储库将弄清楚发生了什么,如果我们查看GitHub中的Network选项卡,它将显示为我们一直在使用的分支从未存在(或多或少)。
删除本地分支
如果我们在将它合并到master之后完成了我们的分支,或者由于其他原因我们想要丢弃分支,我们可以通过首先打开Checkout / Switch对话框来获取Browse refs对话框来删除本地分支。
在Browse refs对话框中,我们可以右键单击本地分支并选择删除它。
删除远程分支
要删除远程分支,我们可以做同样的事情,但不是右键单击我们的本地分支,而是在对话框左侧展开远程树,然后找到远程分支。
放弃
我不是Git的专家(虽然我希望有一天)所以如果你在这篇文章中看到错误,请不要犹豫,让我知道!不过,这个工作流程似乎对我有用。
PS。有关新帖子的更新,我发现有用的网站以及偶尔的咆哮,您可以在Twitter上关注我。您也可以订阅RSS-feed。