【问题标题】:Missing line in git repogit repo 中缺少一行
【发布时间】:2021-01-21 15:55:08
【问题描述】:

我的 git repo 发生了一些奇怪的事情。
从下面的差异可以看出,一开始我们添加了console.log(config),在下一次提交中我们删除了它,最后我们再次删除了它,因为该行仍然存在于 repo 中。

这怎么可能?也许合并发生了一些奇怪的事情?

commit e28e546f003f4b55cc508e60b8a2c7ba3ad1ffab
Date:   Thu Jan 21 14:46:50 2021 +0100

    remove console log

diff --git a/lib/config.js b/lib/config.js
index 6f20b32..ba26ac3 100644
--- a/lib/config.js
+++ b/lib/config.js
@@ -293,8 +293,6 @@ for (let c in config) {
 
 config.i18n.supportedLocales = (config.i18n.locales).filter(l => l.iso === locale)
 
-console.log(config)
-
 const exportedConfig = {
   config: config,
   server: {

commit fc05a16cda8cd9f72d73b995af001dd4ef932a70
Merge: 5b1ef6e 86e1a6a
Date:   Wed Jan 20 17:53:14 2021 +0000

    Merge branch 'development' into 'staging'
    
    Development --> Staging
    
    See merge request !681

commit 86e1a6aaec44c65e89e0507caf463876d9323d86
Date:   Wed Jan 20 18:50:03 2021 +0100

    Fool GIT

diff --git a/lib/config.js b/lib/config.js
index 29d0c26..ba26ac3 100644
--- a/lib/config.js
+++ b/lib/config.js
@@ -289,6 +289,8 @@ for (let c in config) {
   }
 }
 
+/// console.log(config)
+
 config.i18n.supportedLocales = (config.i18n.locales).filter(l => l.iso === locale)
 
 const exportedConfig = {

commit fc85ca3069f9d76072a0488cade1477e47844e8d
Date:   Wed Jan 20 18:45:17 2021 +0100

    Remove console.log()

diff --git a/lib/config.js b/lib/config.js
index f2f295c..29d0c26 100644
--- a/lib/config.js
+++ b/lib/config.js
@@ -291,8 +291,6 @@ for (let c in config) {
 
 config.i18n.supportedLocales = (config.i18n.locales).filter(l => l.iso === locale)
 
-console.log(config)
-
 const exportedConfig = {
   config: config,
   server: {

commit f2d09dc045dd3e536a09929403e067c5c8fb8b62
Date:   Wed Jan 20 18:43:39 2021 +0100

    Restore console.log()

diff --git a/lib/config.js b/lib/config.js
index 29d0c26..f2f295c 100644
--- a/lib/config.js
+++ b/lib/config.js
@@ -291,6 +291,8 @@ for (let c in config) {
 
 config.i18n.supportedLocales = (config.i18n.locales).filter(l => l.iso === locale)
 
+console.log(config)
+
 const exportedConfig = {
   config: config,
   server: {

【问题讨论】:

    标签: git git-merge git-diff


    【解决方案1】:

    在合并提交中添加了该行。如果你 checkout 提交并打开 lib/config.js 你会看到那里的行。

    那么,为什么这些行不显示在差异中呢?这很令人困惑,我会同意你的。这是因为diff 没有显示合并提交的差异。

    每当它进行 diff 时,git 需要知道哪些提交正在被区分。大多数提交都有一个父级,因此差异在每个提交与其父级之间。然而,合并提交有多个父节点。它应该与哪个不同?有多个选项可供选择,git 并不知道如何显示有用的差异,所以它只显示提交消息。

    更深入的解释见this excellent answer

    提交不是差异;提交是快照。这似乎是一个没有区别的区别——对于某些提交,它。但是对于合并提交,它不是

    git show(或git log -p)将提交显示为作为差异时,它通过将提交的快照与其他内容进行比较来做到这一点git diff 命令做同样的事情:它将一个提交与另一个提交进行比较。 (或者它可以将提交与工作树或索引的内容或其他一些组合进行比较。)

    对于普通的提交,比较什么很明显:比较 this 提交的快照与 previous(即父级)提交的快照。这就是 git show 所做的(以及 git log -p 也是):它从父提交运行 git diff 到此提交。

    不过,合并提交不只有一个父提交。他们有两个父母。1这就是他们首先“合并提交”的原因:合并提交的定义是至少有两个父母的提交。

    【讨论】:

      猜你喜欢
      • 2013-07-12
      • 2017-09-01
      • 2011-06-07
      • 1970-01-01
      • 2011-11-01
      • 2020-07-12
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多