来说说 Git 分支那点事儿_java


在当今软件开发时代,想必大多数开发团队都是在协作环境中工作。

在这种环境下,多个开发者为相同的源代码做贡献,有些人会修复错误,有些人可能在开发新的功能。


这时候问题就出现了,如何维护相同代码库的不同版本呢?


这就是分支Branch功能有价值的地方!分支功能允许开发人员通过从源代码库创建新分支将自己的工作与其它人分开。


什么是分支


分支是一个独立的开发路线。它用来指向下一次提交的指针。每当创建新分支时,Git都会创建一个新指针,同时保持源代码基本不变。


当你在仓库中进行第一次提交时,Git会默认自动创建一个主分支。接下来你的的每一次提交都会转到主分支中,直到您决定创建并切换到另一个分支。


创建分支


如下命令会创建一个新分支:


git branch hello-world


来说说 Git 分支那点事儿_java_02


说明:此命令只会创建新分支,要开始使用它,还需要用git checkout切换到这个分支才行。现在,我们准备好使用标准的git add和git commit命令。


这样就能看到两个不同的分支指向同一个提交。Git如何知道当前检出的是哪个分呢?这时就需要来看一下HEAD指针的来源。请看下图:



来说说 Git 分支那点事儿_java_03


HEAD总是指向当前签出的分支或者提交。在我们的例子中,它是主分支。让我们来用 git checkout hello-world ,看看会发生什么。


来说说 Git 分支那点事儿_java_04


如你所见,HEAD现在指向hello-world分支,而不是主分支。下一步是修改一些文件并使用git commit -m "commit message" 创建一个新的代码提交。


来说说 Git 分支那点事儿_java_05


我们在分支hello-world创建了一个新的提交(C5)。指针始终移动到我们检出的那个分支中的最新提交的点。hello-world分支中的更改不会影响任何其它分支,使你的工作与其他团队成员隔离开来。


说明:为每个任务创建一个新的分支是常见的做法(例如bug修复,新特性等),这是一个值得推荐的做法,它允许其他人轻松识别期待的变化 ,并且为了回溯目的来理解为什么特定的代码更改被执行。 


您可以创建自己的Ruby on Rails项目并尝试一下!在不同的分支上进行RSpec测试并提交更改。


可调整的指针


前面我们说过,HEAD总是指向当前签出的分支或提交。发布一个提交,来看看git checkout C0会发生什么。


来说说 Git 分支那点事儿_java_06


现在,HEAD指针指向到C0。我们目前正在检查一个远程分支。是否可以在签出时创建一个新的提交。如下命令:


git commit -m "commit message"


来说说 Git 分支那点事儿_java_06


HEAD被分离并且与创建的每个新的提交一起移动。新创建的提交C6指向C0,很像一个分支,但它却不是。


30天后,任何分支或标记无法访问的提交将被垃圾收集处理并从存储库中永久删除。


为了避免这种情况,我们只需要为新创建的提交创建一个新分支。使用以下命令对其进行签出: git checkout -b hotfix C6 。


来说说 Git 分支那点事儿_java_08


希望你在解决新问题时用Branch分支来避免打扰同事们的开发,Happy Coding!