高级 Git 工作流程和用法

已发表: 2022-06-30

最近,我们了解了在项目中使用 Git 进行源代码控制的基础知识。 虽然这是一个很好的起点,但还有许多其他命令和 Git 工作流程可以帮助您在日常编码工作中使用 Git。

Git 工作流程

当我开始使用 Git 时,我想我知道如何正确使用它。 我理想的方法是在一个没有分支的地方进行所有更改,然后将它们提交到存储库并继续工作。

虽然它比不使用版本控制要好,但我花了一段时间才意识到我没有使用 Git 提供的大部分功能。 为了让 Git 为我工作,我需要一个策略来分支和合并我的更改。

然后 git-flow 出来了,我采用了它作为我的策略。 我仍然记得感觉就像我在幕后偷看了不起的开发人员所在的地方。 我现在对它们的工作方式有了深入的了解,并且可以开始成为其中的一员。

但是 git-flow 并不适合所有场景,因此在我们研究它的同时,我们还将研究其他一些保持 Git 项目井井有条的方法,包括我作为一个单独的开发人员如何管理我的项目。

混帐流

现在看看 git-flow,我承认软件环境在 10 年内发生了很大变化,git-flow 可能不是您团队的最佳选择。 在编写 git-flow 的时候,一天内很少部署一个应用程序很多次。 相反,如果您在一个特别敏捷的团队中,您可能会每隔几个月或几周发布一次主要版本号和发布。

我们来看看git-flow是什么。

如果你想看到关于 Git Flow 的图表和 Git 命令的完整深入解释,你应该阅读这篇文章。

在 git-flow 中,两个分支的生命周期是无限的。 首先,main 应该反映准备好部署到您的实时/生产环境的代码。

其次,我们有我们的开发分支。 这个分支应该有最新的变化,为我们软件的下一个版本做好准备。 当开发中的更改准备好部署到我们的实时应用程序时,我们将它们合并到主分支并用与发布号对应的版本号标记它们。

在两大分支之外,还有三种支撑分支。

一、特点

特性分支只能从开发分支创建。 它必须合并回开发分支。 命名可以是描述您正在处理的功能的任何内容。

当工作准备好下一个版本时,它会合并回开发分支,等待发布时间。

2.发布

发布分支是从开发分支创建的,并且必须合并回开发和主分支。 您使用 release-x 约定命名一个发布分支。 在实践中,这通常意味着您将使用您计划使用的版本号命名一个分支,如下所示:release-2.2

您使用发布分支作为最后准备发布软件的一种方式。 这可能包括增加文件的版本号、确保您的翻译已完成或最终的代码检查。

3. 修补程序

hotfix 分支是从主分支创建的,用于包含需要在实时应用程序中立即处理的更改。 这可能是必须修复的错误或需要处理的安全问题。

一旦问题得到解决并将其部署到您的主分支,您将使用正确的版本号标记您的代码。

团队现在不使用 git-flow 的最大原因是我们发布软件的方式发生了变化。 您可以在一天内多次发布对应用程序的更改,而不是不那么频繁地发布较大的版本。 我知道一旦准备好,我每周都会多次将工作推送到客户的站点。 我们不做网站的版本号,我们只是不断改进它。

标准 git-flow 并不意味着适应这一点。

Github 流

许多人使用的第二个选项是 Github Flow。

Github Flow 的一个重要规则是,主分支上的任何代码都可以随时部署,因为它已准备好生产。

所有分支都是从主分支创建的,并为您正在做的任何事情提供一个描述性名称。

准备好更改后,您可以创建拉取请求。

拉取请求告诉其他使用相同代码的人,在将这些更改合并到主代码之前,您正在做的工作已经准备好进行审查。

提交拉取请求后,与您合作的团队可以查看更改并提供反馈。 如果认为拉取请求已准备好合并,则将其合并到项目的主分支中。

对于单个开发人员或非常小的团队来说,Github 流的一个缺点是管理拉取请求可能会在管理项目时产生额外的开销。 这就是为什么我不在工作中使用它们的原因。

我如何在客户端项目中使用 Git 工作流

在我的客户工作中,我通常是唯一一个每天为项目编写代码的人。 我的客户可能会更新 WordPress 插件或更改一些 CSS,但他们不做任何主要的编码工作。 这意味着如果我使用 Github 流程,我将审查我的拉取请求,这只会带来额外的管理难题。 让我们看看我使用的系统,它与 git-flow 和 Github flow 都有一些相似之处。

我有两个主要分支,分别称为 main 和 staging。 主分支跟踪生产站点上当前运行的任何代码。 在我们将更改推送到实时站点之前,暂存分支跟踪我们用来测试更改的暂存站点上正在测试的任何内容。

每个分支都是从主分支创建的。 新功能的名称如下:feature/32-new-feature。 在这种情况下,数字 32 对应于我们项目管理系统中的工单编号,其后面的单词是对正在处理的内容的简短描述。 错误修复的名称类似,bug/20-bug-name。

创建的每个分支都会先合并到我们的暂存分支中,然后一旦得到客户的批准或我自己的测试,就会合并到主分支中。 该工作流程可能如下所示。

# 将特征合并到暂存分支

git 合并功能/32-新功能

# 部署和测试功能

git结帐主要

git 合并功能/32-新功能

# 将功能部署到实时站点

在我的项目中,我设置了持续部署,这意味着每当我将代码推送到 main 时,它都会自动推送到实时站点。 为暂存分支设置相同的过程。

如果我与一个可以在拉取请求工作流中检查我的代码的团队合作,那么我会使用这个系统,因为它在团队中运行良好。 对于一个主要靠自己工作的开发人员来说,只是管理开销会减慢您的工作流程。

我使用的高级 Git 命令

现在我们对如何在实际工作流程中使用 Git 有了一些想法,让我们看一下实现这一点所需的更高级的命令。 在处理客户代码时,我每周至少使用这些命令几次。

即使您打算使用 GUI 应用程序(我在上一篇关于 Git 的文章中提到了一些好的应用程序),了解后台发生的事情仍然很重要。 很多时候,我不得不通过终端解决由 Git GUI 应用程序创建的问题。

按行添加更改

对我来说,通过终端点击使用 Git 的一个命令是 git add -p。 在我学会这个命令之前,我使用 GUI 应用程序,因为我会在我的代码中进行更改,但想将特定的行分解为不同的提交,以便我可以解释为什么我进行了更改。 为此,我使用 GUI 来选择行,但 git add -p 会引导您通过交互式界面添加块中的更改。

我每天都使用这个很多次。

跟踪远程 Git 分支

如果您要拉下现有存储库并具有需要跟踪但已经存在的 main 和 staging 等分支,则需要告诉分支的本地版本以跟踪分支的远程版本。

有几种方法可以做到这一点。

# 推送到远程时设置上游

git push -u 原点暂存

# 设置上游

# 假设你在你想要远程跟踪的分支上

git 分支 -u 起源/暂存

git 分支 --set-upstream-to=origin/staging

# 如果您不在要跟踪的分支上,则在最后指定分支

git branch --set-upstream-to=origin/staging staging

保存更改而不提交

有时您会处于一些尚未准备好提交的工作的中间,但您需要保存其状态。 这就是 git stash 有用的地方。 此命令通过删除更改为您隐藏更改。 您可以使用 git stash pop 将它们取回。 还有一些命令可以使 stash 有用,但这是我经常使用的两个。

拉取特定的 Git 提交

有时您需要将特定提交拉入当前工作。 使用干净的 HEAD(您尚未进行任何更改),您可以使用 git cherry-pick 拉入特定的提交。 你可以在这里找到关于 git cherry-pick 的完整文档。

对于每个提交,Git 都会构建一长串字母和数字,称为 Git 对象,通常称为 SHA。 由于每个提交都有一个,因此您可以使用其 SHA 值引用一个提交。 阅读更多关于 Git 对象的信息。

扔掉你不需要的改变

在任何项目的某个时刻,我们都会进行更改,然后意识到它不起作用,我们需要简单地废弃它们并重新开始。 我们可以使用以下 Git 命令删除尚未跟踪的任何更改,而不是仅仅尝试撤消直到我们回到我们想要的位置。

git reset --hard

上面的命令会将您的代码重置为您当前正在处理的分支上的最新提交。 如果我们想恢复到最近一次提交之前的状态,我们还可以使用带有此命令的 <#commitSHA> 来重置到特定的提交。 也许您会使用它来重置初始分支结帐,因为您不想保留整个分支的工作价值,但您已经跟踪了一些工作。

更进一步,我们可以使用 git clean 命令丢弃任何尚未在 git 中跟踪的文件或目录。

git clean -fd:标志 f 和 d 告诉 git 丢弃未跟踪的文件和目录。

删除分支

每隔一两周,我都会查看 git status 命令的结果,发现我的分支太多,无法合理地理解我的存储库中发生了什么。 这意味着我可以删除与已使用以下命令解决的票证相对应的任何分支。

# 删除本地版本

git 分支 -d $ 分支名称

#删除我遥控器上的分支

git push $remotename --delete $branchname

使用版本控制

虽然您可能不是您将使用的所有 Git 命令的专家,但要记住的一件重要事情是您应该使用版本控制。 即使您是项目的唯一工作人员,使用 Git 和 Git 工作流程也将帮助您保持项目井井有条。 在编写不起作用的代码后重置工作之前,您无需按 CTRL + Z。

您将能够信任您的系统并继续为您的项目工作。

尝试完全托管的 WordPress 托管

需要为 WordPress 优化的主机? 立即查看 Nexcess 的完全托管的 WordPress 托管计划。