如何在 Git 中比较两个分支?


协作者将使用多个分支来拥有清晰分离的代码库。在某些时候,我们可能需要合并这些分支,以便将最终的工作合并到主分支中。在合并之前比较分支中的差异非常重要,以避免任何冲突。我们将看到几种比较两个分支的不同方法 -

  • 列出提交差异 - 此方法显示在一个分支中存在但在另一个分支中不可用的提交。

  • 列出文件更改 - 此方法比较分支并显示两个分支中特定文件的确切差异。

从下图我们可以很容易地理解存储库中有两个分支,一个是master,另一个是feature分支。每个提交及其对应的提交消息都显示在图中。从图中可以清楚地看出,初始提交哈希值为“9260faa”

可以使用以下命令获取分支的类似图形表示。

$ git log −−oneline feature −−all −−graph

在下面给出的输出中,“*”表示一个提交,我们可以看到有 4 个星号,这意味着有 4 个提交。“9260faa”是初始提交。有两个分支从初始提交开始,左侧是 master 分支,右侧是 feature 分支。

delI@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git log −−oneline feature −−all −−graph
* 0f26bbe (HEAD −> master) bonjour add
|* eOccfce (feature) howdy file add
|* 71b4d39 how are you added
|/
* 9260faa hello. txt

列出提交差异

在某些时候,feature 分支必须合并到 master,因为它是我们的主要工作线。使用git log命令列出提交差异的语法如下所示 -

$ git log <branch1>..<branch_2>

以下命令比较两个分支并返回存在于feature分支但不存在于master分支中的提交。

$ git log master..feature −−oneline

输出如下所示 -

e0ccfce (feature) howdy file add
71b4d39 how are you added

列出文件差异

如果我们想根据对文件执行的更改来比较两个分支,我们需要使用diff工具。使用diff工具的语法如下 -

$ git diff <branch_name>

以下命令列出当前分支(master)feature分支中文件的差异。

$ git diff feature

这将给出非常详细的差异。如果我们不想查看详细的差异,但只需要知道哪些文件不同,请使用−−name−only。这在下面的示例中显示。

$ git diff −−name−only feature

输出如下所示 -

bonjour.txt
hello.txt
howdy.text

−−name−status标志可与 diff 工具一起使用以显示文件名及其状态。

$ git diff −−name−status feature

输出如下所示。左列显示文件的状态,右列显示文件的名称。

  • 表示该文件存在于当前分支中,但在另一个分支中不可用。

  • 表示该文件已修改,并且其内容在两个分支中不同。

  • 表示该文件已从当前分支中删除,但在另一个分支中可用。

dell@DESKTOPN961NR5 MINGW64 /e/tut_repo (master)
S git diff −−namestatus feature
A bonjour . txt
M hello. txt
D howdy. text

dell@DESKTOPN961NR5 MINGW64 /e/tut_repo (master)
$ git diff −−nameonly feature
bonjour. txt
hello.txt
howdy. text

更新时间: 2021年2月20日

2K+ 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告