如何在 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@DESKTOP−N961NR5 MINGW64 /e/tut_repo (master) S git diff −−name−status feature A bonjour . txt M hello. txt D howdy. text dell@DESKTOP−N961NR5 MINGW64 /e/tut_repo (master) $ git diff −−name−only feature bonjour. txt hello.txt howdy. text