【问题标题】:git diff commits do not shows all the changed files' differencegit diff commits 不显示所有更改文件的差异
【发布时间】:2020-01-18 22:53:15
【问题描述】:

当我从master分支合并一个分支(wxc):

$ git merge wxc
Merge made by the 'recursive' strategy.
 Q2/__init__.py                                                                |   3 +
 Q2/common/GLOBAL_CONST.py                                                     |   8 +--
 Q2/urls.py                                                                    |   7 ---
 .../admin_productconfig_physicalserver/api/paginations.py"                   |   1 +
 .../admin_productconfig_physicalserver/api/serializers.py"                   |  22 ++++++-
 .../admin_productconfig_physicalserver/api/switch_cmd_util.py"               |  31 +---------
 .../admin_productconfig_physicalserver/api/urls.py"                          |   6 ++
 .../admin_productconfig_physicalserver/api/views.py"                         | 133 +++++++++++++++++++++++++++++++++++++++-
 .../admin_productconfig_physicalserver/migrations/0091_mg.py"                |  34 ++++++++++
 .../admin_productconfig_physicalserver/migrations/0092_mgnumber.py"          |  25 ++++++++
 .../migrations/0093_auto_20190902_1249.py"                                         |  19 ++++++
 .../migrations/0094_merge_20190906_0822.py"                                        |  16 +++++
 .../admin_productconfig_physicalserver/models.py"                            |  61 ++++++++++++++++--
 .../admin_usermanage/api/serializers.py"                                     |   2 +-
 .../admin_usermanage/api/views.py"                                           |   4 +-
 15 files changed, 318 insertions(+), 54 deletions(-)
 create mode 100644 "\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/qiyun_admin_productconfig_physicalserver/migrations/0091_mg.py"
 create mode 100644 "\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/qiyun_admin_productconfig_physicalserver/migrations/0092_mgnumber.py"
 create mode 100644 "\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/qiyun_admin_productconfig_physicalserver/migrations/0093_auto_20190902_1249.py"
 create mode 100644 "\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/qiyun_admin_productconfig_physicalserver/migrations/0094_merge_20190906_0822.py"

你看到有很多文件变化,比如Q2/__init__.pyQ2/common/GLOBAL_CONST.pyQ2/urls.py等等:

然后我查看我的master brach 最新的两条日志:

$ git log -n2
commit b63c3856677916f8008b338c139bd3b00c90593d (HEAD -> master)
Merge: 6b59b80 3e85a8d
Author: dale <dale@gmail.com>
Date:   Wed Sep 18 11:28:25 2019 +0800

    Merge branch 'wxc 20190917-wxc'

commit 3e85a8dfd0270f6fb0f3786b8761038df322890f (remote_repo/wxc, wxc)
Author: dale <dale@gmail.com>
Date:   Tue Sep 17 16:04:54 2019 +0800

    '2019-09-17-wxc-01'

我想比较最近两次提交的差异:

dale-MBP:Q2 ldl$ git diff 3e85a8df b63c3856
diff --git "a/\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/admin_productconfig_physicalserver/api/whmcs/views.py" "b/\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/admin_productconfig_physicalserver/api/whmcs/views.py"
index ccc1ba3..9fac902 100644
--- "a/\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/admin_productconfig_physicalserver/api/whmcs/views.py"
+++ "b/\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/admin_productconfig_physicalserver/api/whmcs/views.py"
@@ -74,8 +74,11 @@ class WHMCSPhysicalServerIPMIManagementAPIView(APIView):

             if whmcs_site not in [
                 "www.44.hk",
+                "44.hk",
                 "www.44.com",
-                "www.44.net"
+                "44.com",
+                "www.44.net",
+                "44.net"
             ]:
                 return Response(status=HTTP_400_BAD_REQUEST, data="error")

@@ -100,6 +103,8 @@ class WHMCSPhysicalServerIPMIManagementAPIView(APIView):
             physical_server_name = request.data.get('physical_server_name')
             action = request.data.get('action')

+            physical_server_name = str(physical_server_name).split("/")[0]
+
             if not physical_server_name or not action:
                 return Response(data="invalid request data", status=HTTP_400_BAD_REQUEST)

你看那里只比较一个文件(admin_productconfig_physicalserver/api/whmcs/views.py),为什么不比较其他文件?另一个问题是admin_productconfig_physicalserver/api/whmcs/views.py 不存在于merge 文件更改列表中:

 Q2/__init__.py                                                                |   3 +
 Q2/common/GLOBAL_CONST.py                                                     |   8 +--
 Q2/urls.py                                                                    |   7 ---
 .../admin_productconfig_physicalserver/api/paginations.py"                   |   1 +
 .../admin_productconfig_physicalserver/api/serializers.py"                   |  22 ++++++-
 .../admin_productconfig_physicalserver/api/switch_cmd_util.py"               |  31 +---------
 .../admin_productconfig_physicalserver/api/urls.py"                          |   6 ++
 .../admin_productconfig_physicalserver/api/views.py"                         | 133 +++++++++++++++++++++++++++++++++++++++-
 .../admin_productconfig_physicalserver/migrations/0091_mg.py"                |  34 ++++++++++
 .../admin_productconfig_physicalserver/migrations/0092_mgnumber.py"          |  25 ++++++++
 .../migrations/0093_auto_20190902_1249.py"                                         |  19 ++++++
 .../migrations/0094_merge_20190906_0822.py"                                        |  16 +++++
 .../admin_productconfig_physicalserver/models.py"                            |  61 ++++++++++++++++--
 .../admin_usermanage/api/serializers.py"                                     |   2 +-
 .../admin_usermanage/api/views.py"                                           |   4 +-
 15 files changed, 318 insertions(+), 54 deletions(-)
 create mode 100644 "\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/qiyun_admin_productconfig_physicalserver/migrations/0091_mg.py"
 create mode 100644 "\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/qiyun_admin_productconfig_physicalserver/migrations/0092_mgnumber.py"
 create mode 100644 "\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/qiyun_admin_productconfig_physicalserver/migrations/0093_auto_20190902_1249.py"
 create mode 100644 "\346\227\227\344\272\221\347\256\241\347\220\206\345\221\230\345\220\216\345\217\260/\344\272\247\345\223\201\351\205\215\347\275\256/qiyun_admin_productconfig_physicalserver/migrations/0094_merge_20190906_0822.py"

【问题讨论】:

标签: git git-diff


【解决方案1】:

当您运行git diff 3e85a8df b63c3856 时,您并没有查看两个分支之间的综合差异。相反,您正在查看在两个父分支之一中所做的最后更改(无论哪个恰好包含最近的更改)。

这是因为合并提交 (b63c3856) 仅用于通过捕获两个父提交和一条日志消息来记录合并。来自git-merge description

然后“git merge topic”将重播对该主题所做的更改 分支,因为它从 master(即 E)分歧,直到它的当前 在 master 之上提交 (C),并将结果记录在新的提交中 以及两个父提交的名称和来自的日志消息 描述更改的用户。

要注意的关键是“重播更改”。每个分支的所有单独提交都被保留。

在您的git log 输出中,注意输出中描述合并提交的Merge 字段:

Merge: 6b59b80 3e85a8d

这些是合并之前每个分支的最后两次提交的提交哈希。您可以使用以下命令显示分支之间的差异:

git diff 6b59b80...3e85a8d

来自git diff documentation

git diff [] ... [--] [...​]

此表单用于查看包含和最多的分支上的更改 第二个

git log 输出视为图表也可能是说明性的:

$ git log --graph --oneline --all

或者,如果您在合并时使用了--squash 标志,那么行为将符合您的预期。来自git-merge --squash flag documentation(强调我的):

生成工作树和索引状态,就像发生真正的合并一样 (合并信息除外),但实际上并不提交, 移动 HEAD,或记录 $GIT_DIR/MERGE_HEAD (导致下一个 git commit 命令创建一个合并提交)。 这允许您创建 当前分支顶部的单个提交,其效果相同 就像合并另一个分支(或者在章鱼的情况下更多)。

【讨论】:

    【解决方案2】:

    合并提交记录来自合并分支的合并更改,以及对合并内容提示的提交的引用。

    浓缩自man git-merge:

    给定:

          A---B---C topic
         /
    D---E---F---G master
    

    ...将topic 合并到master 将得到:

          A---B---C topic
         /         \
    D---E---F---G---H master
    

    commitH,合并提交,记录topic合并到master的结果。它的 first 父级将是 G(在 master 上合并之前的提交)。它的第二个父级将是Ctopic 上的最后一次提交)。

    在合并提交下的日志中显示的提交是合并提交的 second 父级,即您合并的分支的最后一次提交(上例中的C)。要将master 分支与合并前的状态(上例中的G)进行比较,请与合并前master 中的最后一次提交进行比较。这将是第一个父母。

    git diff master^1 master
    

    作为简写,您可以省略 1,因为它是隐含的:

    git diff master^ master
    

    man gitrevisions 上指定修订的更多信息。

    【讨论】:

      猜你喜欢
      • 2013-01-11
      • 1970-01-01
      • 2017-03-12
      • 2011-06-11
      • 1970-01-01
      • 2022-12-03
      • 2014-04-18
      • 1970-01-01
      • 2019-09-24
      相关资源
      最近更新 更多