微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

git repo 中缺少行

如何解决git repo 中缺少行

我的 git 仓库发生了一些奇怪的事情。
正如您从以下差异中看到的那样,起初我们添加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,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: {

解决方法

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

那么为什么差异中没有显示线条?这令人困惑,我会答应你。这是因为 diff 不显示合并提交的差异。

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

更深入的解释见this excellent answer

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

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

对于普通提交,比较什么是显而易见的:将这个提交的快照与上一个(即父)提交的快照进行比较。所以这就是 git show 的作用(还有 git log -p):它从父提交到这次提交运行 git diff

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。