Git 在合并冲突期间运行diff时,是否有方法查看文件中更改的时间戳?
有时,我会发现自己处于这样一种情况:在解决合并冲突时,我需要知道何时(如日期和时间)对冲突文件进行了特定更改,以便我可以决定是要接管一个文件还是编辑该文件 在这些情况下,我对各自分支中的相关文件使用Git 在合并冲突期间运行diff时,是否有方法查看文件中更改的时间戳?,git,command-line,command-line-arguments,Git,Command Line,Command Line Arguments,有时,我会发现自己处于这样一种情况:在解决合并冲突时,我需要知道何时(如日期和时间)对冲突文件进行了特定更改,以便我可以决定是要接管一个文件还是编辑该文件 在这些情况下,我对各自分支中的相关文件使用git,并获取我感兴趣的特定更改的日期和时间。这很好,但是我觉得应该有一个更简单的方法来做到这一点 有没有人有更好的方法来实现这一点的建议?我查看了git的documentation,但没有找到任何能让这个过程更简单的方法。不必在git中我很乐意找到替代方法/工具..等等不。没有。因为提交不保存更改,
git
,并获取我感兴趣的特定更改的日期和时间。这很好,但是我觉得应该有一个更简单的方法来做到这一点
有没有人有更好的方法来实现这一点的建议?我查看了git的
documentation,但没有找到任何能让这个过程更简单的方法。不必在git中
我很乐意找到替代方法/工具..等等不。没有。因为提交不保存更改,它们保存快照。合并操作只查看三个快照:合并基本提交和两个分支提示提交
我可以通过对各自分支中的文件运行git
来解决这个问题
至少在Git中,这是一个根本不同的操作。git-dull
(或git-annotate
)命令一次向后(通常)遍历一个提交图,比较每个父提交对和子提交对中的一些文件和行。这将在链中定位一个特定的早期提交,其中出现在链中最后一次提交中的特定行仍然出现在该早期提交中。实际上,在开始提交的每个源代码行中,责备都会执行一次,即最新的提交;也许你会称之为结束,而不是开始,但优化,使它走得快
让我们把它画成一个具体(但简单)的例子-git-burn
处理更复杂的情况,包括分支和合并子图,但我们在构建示例时将忽略这些。假设我们有以下情况:
I--J <-- branch1 (HEAD)
/
...--G--H
\
K--L <-- branch2
Git现在将尝试合并这两组更改。如果文件F出现在所有三个提交中,H
和J
和L
,但在所有三个提交中都不同,则两个单独的差异输出将在两个差异中对F进行一些更改。这些更改需要合并为一个更改,该更改可以应用于commitH
中出现的F的副本
当这些更改重叠(接触H
中F的同一行)或邻接(任何一方的更改的结尾恰好位于另一方不同更改的开始的边缘,同样指H
中F的副本),这就是合并冲突
我想你想要的是一个工具,它将,考虑到我们知道H
-vs-J
和H
-vs-L
都会“触摸”F中的一些行,运行git dull-L H^@..J
和git dull-L H^@..L
,以获得适当的行范围(基于分别在J
和L
中修改的H
中F的副本)。如果J
和L
在H
中出现这些行的点上方添加或删除了行,则这两个
表达式可能不同
这两个git-gun
将检查提交J
,然后检查I
,然后检查H
(对于第一种情况)和L
,然后检查K
,然后检查H
(对于第二种情况)。这些检查非常对称,因此在考虑问题时,我们可以只看一个“面”。我们将重复该操作,但可能会使用不同的行号,如上文所述。由于存在合并冲突,我们知道相关行在H
-vs-J
中确实发生了更改。因此,它们:
- 在
H
-vs-I
中更改,而不是在I
-vs-J
中更改,或
- 在
H
-vs-I
中未发生变化,但在I
-vs-J
中发生变化,或
- 在
H
-vs-I
和I
-vs-J
因此,git-dull
将为范围内的每一行分配commitI
或commitJ
提交I
和J
的时间戳并不是这里真正感兴趣的项目。相反,提交哈希很有趣:它们识别哪些提交促成了更改
最大的复杂性是,对于范围中的每一行,贡献可能来自不同的提交。由于git merge
只查看H
-vs-J
,可能有两行更改:
-first
-second
+1st
+2nd
实际上是一行更改,在I
中将“first”替换为“1st”,然后在J
中将“second”替换为“2nd”
当合并中的提交范围较大时,如:
A--B--C--D--...--Y--Z <-- branch1 (HEAD)
/
...--o--*
\
o--...--o <-- branch2
A--B--C--D--Y--Z否。没有一个快照,因为提交不保存更改,它们保存快照。合并操作只查看三个快照:合并基本提交和两个分支提示提交
我可以通过对各自分支中的文件运行git
来解决这个问题
至少在Git中,这是一个根本不同的操作。Git-dull
(或Git-annotate
)命令一次一个提交,向后(通常)遍历图形,比较每个父级和子级提交对中的一些文件和行。这将定位链中特定的早期提交,其中出现在链中最后一次提交中的特定行仍然出现在该早期提交中。实际上,责备会对开始提交中的每个源行执行一次。好的,最近一次提交;可能是你会称之为结束,而不是开始,但经过优化使之成为g
A--B--C--D--...--Y--Z <-- branch1 (HEAD)
/
...--o--*
\
o--...--o <-- branch2