git diff commit不会显示所有更改文件的差异

时间:2019-09-18 04:16:15

标签: git git-diff

当我从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分公司最近的两个日志:

$ 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"

2 个答案:

答案 0 :(得分:2)

运行git diff 3e85a8df b63c3856时,您并没有查看两个分支之间的合并差异。取而代之的是,您正在查看两个父分支之一中的最后一个更改(碰巧包含最新更改)。

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

  

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

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

在您的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命令来创建合并提交)。 这使您可以创建   在当前分支之上的单个提交,其效果相同   合并另一个分支 (如果有章鱼,则更多)。

答案 1 :(得分:1)

合并提交记录合并分支中的合并更改,并在合并提示时记录对提交的引用。

man git-merge浓缩而成:

给出:

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

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

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

提交H(合并提交),记录将topic合并到master中的结果。它的 first 父级将是G(在master上合并之前的提交)。它的 second 父级将是C(对topic的最后一次提交)。

在日志中显示的合并提交是合并提交的 second 父级,即您合并的分支的最后一次提交(上例中为C) 。要将master分支更改为合并之前的状态(上例中为G),请对合并之前master中的最后一次提交进行diff。这将是第一位父级。

git diff master^1 master

作为简写,您可以忽略1的含义:

git diff master^ master

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

相关问题