本文是“使用 Git”系列的第三篇。 它假设你已经阅读了安装文章和如何有效使用git的文章。
在版本控制系统领域,GIT 可以说是灵活性最好的系统之一。 学习语法并弄清楚 git 如何最好地服务于您的工作流程和环境非常容易。
本教程将教您如何创建两个分支(主分支和开发分支)以及如何将代码从开发阶段合并到生产阶段。
分支的核心是一系列具有唯一名称的唯一代码更改。 每个存储库可以有一个或多个分支。
默认情况下,第一个分支称为“master”。
查看分支
在创建新分支之前,我们希望查看所有存在的分支。 我们可以通过键入以下内容来查看所有现有分支:
git branch -a
在我们的命令末尾添加“-a”告诉 GIT 我们希望查看所有存在的分支,包括我们在本地工作区中没有的分支。
输出将类似于以下内容:
* master remotes/origin/master
输出第一行中“master”旁边的星号表示我们当前在该分支上。 第二行简单地表明在我们的远程,命名为 origin,有一个分支,也称为 master。
现在我们知道如何查看分支,是时候创建我们的第一个分支了。
创建分支
如本文开头所述,我们希望为我们的编码环境进行开发和生产设置。
我们将把默认的“master”分支视为我们的生产,因此需要创建一个单独的分支用于开发或预生产。
要创建一个名为 develop 的新分支,请键入以下内容:
git checkout -b develop
假设我们还没有一个名为“develop”的分支,输出将如下所示:
Switched to a new branch 'develop'
如果该名称的分支已经存在,GIT 会告诉我们:
fatal: A branch named 'develop' already exists.
您可以使用 git checkout 命令在两个分支之间来回切换:
git checkout master
或者
git checkout develop
假设您尝试切换到的分支存在,您将看到类似于以下内容的输出:
Switched to branch 'master'
如果你尝试切换到一个不存在的分支,比如
git checkout nosuchbranch
Git 会告诉你:
error: pathspec 'nosuchbranch' did not match any file(s) known to git.
现在我们有多个分支,我们需要好好利用它们。 在我们的场景中,我们将使用我们的“开发”分支来测试我们的更改,并使用主分支将它们发布给公众。
为了说明这个过程,我们需要切换回我们的开发分支:
git checkout develop
对我们的开发分支进行更改
在这个分支上,我们将创建一个名为“develop”的新空白文件。 直到我们将它合并到主分支(在接下来的步骤中),它才会在那里存在。
touch develop
就像在上一个教程中一样,我们需要告诉 git 我们要跟踪这个新文件。
我们可以通过键入以下内容添加“develop”文件:
git add develop
上述命令集将创建一个名为“develop”的空白文件,并将其添加到 GIT。
我们还需要提交这个文件,它会将这个文件附加到我们当前所在的分支,即“develop”。
git commit -m "develop file" develop
该文件现在存在于开发分支上; 正如我们即将发现的那样,它在 master 分支上不存在。
首先,我们要确认我们目前在开发分支上。 我们可以通过键入以下内容来做到这一点:
git branch
输出应类似于以下内容:
* develop master
我们之前了解到,分支名称旁边的星号表示我们当前在该分支上。
运行“ls”命令将显示两个文件存在:
ls
输出将显示我们的两个文件,分别名为“file”和“develop”,被发现:
develop file
合并分支之间的代码
有趣的部分是在我们切换回 master 分支之后,我们可以使用 git checkout 命令来完成:
git checkout master
为了确保我们在 master 分支上,我们可以运行以下命令:
git branch
输出将告诉我们我们是哪个分支,用星号表示。
develop * master
再次运行“ls”,我们的新文件似乎丢失了。
file
它没有丢失——它在我们的开发分支上,我们在我们的主分支上。
在我们的场景中,这个文件代表对任何文件(或一个全新的文件)的任何更改,这些文件已经通过了我们开发分支的所有测试,并准备好投入生产。 在分支之间移动代码(通常从开发到生产)的过程称为 合并 。
重要的是要记住在合并时,我们希望位于要合并到的分支上。
在这种情况下,我们希望从存在“开发”文件的开发分支合并到我们的主分支。
记住这一点,考虑到我们已经在 master 分支上,我们所要做的就是运行 merge 命令。
我们可以传递给合并命令的选项之一,即“--no-ff”,意味着我们希望 git 在合并之前保留所有提交消息。 这将使将来更容易跟踪更改。
要将更改从开发分支合并到主分支,请键入以下内容:
git merge develop --no-ff
该命令的输出将类似于以下内容:
Merge made by the 'recursive' strategy. 0 files changed create mode 100644 develop
再次运行 ls 命令将确认我们的“开发”文件现在在我们的主分支上。
develop file
我们现在需要做的最后一件事是,在我们的远程服务器上进行此更改是推送我们的更改,我们可以在 git push 命令的帮助下完成。
git push
您将看到类似于以下的输出,确认您从开发分支合并到远程服务器上的主分支:
Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 332 bytes, done. Total 3 (delta 1), reused 0 (delta 0) To ssh://git@git.domain.tld/repository 9af2dcb..53649cf master -> master
结论
通过遵循上述教程,您应该有一个有效的双分支工作流设置,并希望对 GIT 中的分支如何工作有一个有效的理解。 请在留言中让我们知道你的想法!