git差异 - 比较git的变化
#javascript #网络开发人员 #编程 #git

作者:Muhammad Khabbab

介绍

git也可能令人兴奋,同时也令人生畏。不用担心,我们来这里是为了使您更容易。今天,我们正在探索Git的'git diff'命令,开发人员每天使用它。

此功能强大的工具可帮助您跟踪整个工作目录,提交和分支机构的更改。我们将介绍从基本用法到高级功能等所有内容,例如使用正则表达式,突出一行的变化以及使用两个点和三点进行分支比较。让我们解开git diff的奥秘!

我们将介绍的步骤:

git diff的基本用法

git diff命令显示了两个提交之间或当前存储库与较早提交之间的代码更改。此命令显示文件标头和元数据指示的更改。

具体来说,此命令允许您接受两个输入数据集并输出它们之间的差异。此命令针对GIT数据源执行DIFF函数。它通常与GIT状态和GIT日志结合使用以分析GIT存储库的状况。

git diff命令的语法如下::

git diff

git diff命令默认情况下显示任何未承诺的存储库修改。

我们可以查看已从原始文件中删除的行,以及已添加或修改的任何行。 git diff经常用于比较git存储库中的分支。

基本示例

让我们创建一个简单的测试存储库,并比较使用git diff的工作目录与最后一个提交之间的更改:

react admin template 1

react admin template 1

说明:

  1. 我们将使用mkdir命令创建一个存储库。

  2. 现在,我们将使用CD命令移至我们创建的存储库。

  3. 通过使用touch命令,我们将添加和修改一个带有名称的测试文件。

  4. 我们需要将内容添加到“ testDiff.txt”文件中,因此我们已经将字符串传递给了文本文件的git diff的技术指南。

  5. git init”命令创建一个空白的git存储库 - 基本上是.git目录。

  6. git add testDiff.txt”命令将将testdiff.txt添加到登台区域。这是将在下一个提交中添加文件的区域。

  7. 在此步骤中,我们通过使用git commit进行了更改。调用git commit时,需要包含一条消息。该消息应简要描述所犯下的更改。通过选项-am,您可以在一个命令中添加并创建一个提交的消息。

请注意,如果我们在此阶段执行git差异,将没有结果。这是完全可以的,因为代码存储库中没有更改要显示。

现在,我们将在工作目录中更改testDiff.txt文件的内容,以开始尝试diff输出:

react admin template 1

  1. 当我们执行此命令时,它将更改testDiff.txt文件的内容。一旦修改了此文件,我们就可以看到差异并分析输出。

现在让我们执行“ git diff”命令并分析结果:

react admin template 1

说明:

  1. 它告诉我们在差异中比较了哪些文件。我们正在将代码当前版本中的“ testDiff.txt ”文件与我们代码的最后一个授权版本中的“ testDiff.txt文件进行比较。
  • 文件的旧版本

  • bâbâ新版本的文件

  1. 这条线显示了一些内部git元数据。此输出中的数字匹配与git对象版本哈希标识符。 100644 是内部文件模式标识符。

  2. 一个差异未显示整个文件。它仅显示修改线。 GIT是标准的命名约定,将减去符号( - )分配给文件的A变体,并将a加符号(+)分配给文件的B变体。

  3. 第四行显示符号@@,其次是-1 +1。这些在git术语中被称为“笨蛋”。 git diff中的大块头提供了变化的摘要。在我们的示例中,-1 +1意味着更改是从原始文件和新状态的第一行开始的,默认的上下文范围为一行,表明一行已更改。


严重Web开发人员的开源企业应用程序平台

refine.new使您可以在浏览器中创建基于React的无头UI企业应用程序,您可以立即预览,调整和下载。

ð通过视觉上组合您首选的“ React平台”,“ UI框架,”后端连接器和“ AUTH提供商”的选项;您可以在几秒钟内为您的项目创建量身定制的体系结构。感觉就像可以访问成千上万的项目模板,使您可以选择最适合您需求的模板!


refine blog logo


git diff的优势用法

使用正则表达式的git差异:

我们可以将git diff命令与正则表达式使用,以突出显示特定的更改,这些更改与上一个版本的当前版本之间的差异中的正则表达式相匹配。

语法: git diff --word-diff-regex=\<regex here\>

例如,我们通过添加一行“ testDiff.txt”文件进行了最新更改。我们正在测试的当前功能是带有正则表达式git diff。”现在,我们将使用正则“常规”执行命令。输出应突出显示与上一版本差的正则更改。

react admin template 1

解释

  1. 这是最后一个提交内容的内容差异;此内容当前位于阶段区域。

  2. 这是与以前版本和当前版本之间内容差异中的正则表达式相匹配的突出显示的更改。

突出显示一行的差异变化

另一个有用的选择是--color-words。有时我们只对查看已更改的确切单词而不是查看整个线路感兴趣,而不是在DIFF中使用“经典”显示模式。

语法: git diff --color-words

react admin template 1

解释

  1. 现在,更改只能在一行中看到。红色单词描绘了它已从原始文件中删除。

两个分支之间的git差异

通常,我们有兴趣找到两个分支之间的差异。有两种方法可以在git中实现这一目标。第一个方法涉及运行“ git diff”命令,其中分支名称之间有两个点,而第二种方法则使用三个点。

两个分支之间的git差异(两个点方法)

语法: git diff branch1..branch2

这将向您显示 branch2 的所有承诺, branch1 没有。<<<<<<< /p>

例如,我们有两个分支: main 功能

react admin template 1

现在,我们将使用以下命令检查两个分支之间的区别:git diff main..feature

两个分支都有一个文件“ testDiff.txt”,但带有不同的内容

react admin template 1

此命令检查两个分支(头)的尖端之间的区别。此外,它将向您展示两个分支之间的不同。

说明:

  1. b版本:功能分支包含“ testDiff.txt”文件,其中包含“此内容存在于功能分支中”。

这是一个视觉说明,是使用两个点命令评估主分支和特征分支之间的差异:

react admin template 1

两个分支之间的git差异(三个点方法)

语法: git diff branch1...branch2

三个点差异显示了从最后一个共同提交开始的修订A和修订B之间的变化。这对于查看拉请请求差异很有用。带有3个点的git diff比较了您的功能分支上的最新提交与该共同祖先提交的提交,从本质上讲,这是您从分支开始创建功能的点。

例如,我们有两个分支: main 功能,,但是在创建这些分支并进入分支比较部分之前,我们在登台区域和最后一个提交“部分,因此共同的祖先提交是关于登台区域的。让我们执行3点命令以检查差异。

react admin template 1

说明:

  1. 版本:这是我们在创建功能分支之前做出的最后一个提交,它是主命令和特征命令之间的共同祖先。

  2. b版本:这说明主要和该功能之间的唯一区别是我在功能分支的testdiff.txt文件中添加的新行。

    < /li>

在下面找到一个图表,该图显示了如何使用上述命令(3点)检查主分支和特征分支之间的差异:

react admin template 1

git diff最佳实践

分期区域和工作目录之间的git差异

我们还可以将工作目录中的更改与分期区域中添加的更改进行比较。为此,我们可以使用以下命令:

git diff

让我通过将更改添加到登台区域,然后在工作目录中修改相同文件以比较登台区域和工作目录之间的更改:

来给您一个示例:

react admin template 1

登台区域中添加了文件“ testDiff.txt”中的内容。

react admin template 1

现在使用命令“ git add”将更改移至登台区域

react admin template 1

  1. 进行比较,现在我们将在工作目录中的“ testDiff.txt”中进行更改。

  2. 通过执行命令“ git diff”,我们将获得登台区域和工作目录的比较结果。

红色:表示阶段区域中添加的内容

绿色:表示在工作目录中更改的内容。

分期区域和最后一个提交之间的git差异

假设您将通过提交锁定更改。但是,等等,您想看看您上演的更改与最新提交之间有什么区别,对吗?没问题!通过简单地戴上“ --staged”标志,您就可以在快照中进行比较。

语法: git diff –staged

现在让我通过一个示例解释:

react admin template 1

说明:

  1. 我们已经在现有文件“ testDiff.txt”中添加了一条新行。

  2. 在这里,我们将更改添加到了登台区域。

现在,我们将执行命令git diff –staged以查看登台区域和最后一个提交之间的差异。

react admin template 1

说明:

  1. 版本:最后一个提交包含“这是我们正在添加到文件中的diff” testdiff.txt。

  2. b版本:与上一个提交不同的登台区域,新的行“为登台区添加此新更改”。

两个提交之间的git差异

如果您的目标是在两个特定的git提交之间比较文件,那么您需要做的就是指定对您感兴趣的提交的“ ref”。 “头”,代表您正在工作的当前分支。

使用提交哈希(任何特定提交)进行比较

语法: git diff \<commit_hash\> \<commit_hash\>

现在,我们需要获取要使用git diff进行比较的提交的哈希。为此,我们将使用另一个命令“ git log --pretty=oneline”。

react admin template 1

让我们假设我们将比较这两个提交[ 1&2 中的哈希]。我们将执行以下命令:

git diff 21d752987e7f507494439a599a02a105039b4125 60b1649d99710436fb56991b1120736d5e33c63e

react admin template 1

通过执行此命令,我们将比较两个不同的提交。输出将显示这两个实例之间的差异,有效地向我们展示了文件中发生了什么变化。

比较使用头(最后两个提交)

如果您想找到两个最近的提交之间的区别,则将使用以下命令:

语法: git diff HEAD HEAD~1

react admin template 1

此命令将将最新提交(头)与提交之前的提交进行比较(头〜1)。输出将向您显示两个提交之间的差异。

说明:

  1. (head)代表最近的提交

  2. (head〜1)表示提交(head)

将git diff与其他git命令一起使用

使用git差异与git责备

我们以前深入研究了如何将'git diff'与git哈希一起使用以比较两个特定的提交。但是,记住我们想要比较的委托的精确哈希可能很棘手。那就是“ Git blame”派上用场的地方。我们可以使用它来检索我们感兴趣的提交的哈希,然后使用“ git diff”进行比较。

例如,我们希望查看对testDiff.txt file的最后更改的提交哈希,作者和时间戳。

react admin template 1

您可以使用citil hash使用git diff比较不同的提交(下面的示例)。

react admin template 1

结论

在本文中,对“ git diff”命令进行了彻底检查。我们试图发现所有不同命令以最大程度地利用,从基础到高级技巧再到最佳实践。 “ git diff”只是Git巨大海洋中的一个命令。不要害怕尝试本文提供的所有编码示例。

毕竟,开发人员套件中的工具越多,您做好的准备就更好,可以应对即将出现的不同挑战。继续编码,并继续在我们的博客上探索不同的git文章。