首页 > 解决方案 > git repo 中缺少一行

问题描述

我的 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: {

标签: gitgit-mergegit-diff

解决方案


该行已在合并提交中添加。如果您checkout提交并打开lib/config.js,您将在那里看到这些行。

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

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

有关更深入的解释,请参阅这个出色的答案

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

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

对于普通的提交,比较什么很明显:比较这个提交的快照和前一个(即父级)提交的快照。这就是git showgit log -p也是)所做的:它git diff从父提交运行到此提交。

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


推荐阅读