在git中查找文件发生更改的每个合并/提交
我有一大堆工作在我们的git存储库中“丢失”。i、 我提交了许多文件,有人在某处进行了合并,“丢失”了我所有的更改。我正在努力确定这是怎么发生的。当我使用以下命令查看文件更改日志时: gitk--all--version.txt 我得到以下截图: 这个文件由我们的构建系统管理,它应该包含字符串 1.0.94.0 至少,根据我在上面截图中看到的情况。但事实上,它实际上包含以下字符串: 1.0.92.0在git中查找文件发生更改的每个合并/提交,git,Git,我有一大堆工作在我们的git存储库中“丢失”。i、 我提交了许多文件,有人在某处进行了合并,“丢失”了我所有的更改。我正在努力确定这是怎么发生的。当我使用以下命令查看文件更改日志时: gitk--all--version.txt 我得到以下截图: 这个文件由我们的构建系统管理,它应该包含字符串 1.0.94.0 至少,根据我在上面截图中看到的情况。但事实上,它实际上包含以下字符串: 1.0.92.0 在挖掘存储库的过程中,有人执行了一次合并,合并覆盖了version.txt,内容为1.0.92
在挖掘存储库的过程中,有人执行了一次合并,合并覆盖了version.txt,内容为1.0.92.0。但是这个合并并没有出现在我的gitk输出中。有没有办法运行gitk(或git)来向我显示修改我的文件的所有合并和提交?值得尝试将
--完整历史记录
添加到gitk
命令中gitk
使用这些gitk控制的选项运行git log
(有时运行git rev list
):
# Start off a git log process and arrange to read its output
proc start_rev_list {view} {
global startmsecs commitidx viewcomplete curview
[mass snippage]
if {$vcanopt($view)} {
set revs [parseviewrevs $view $vrevs($view)]
if {$revs eq {}} {
return 0
}
set args [concat $vflags($view) $revs]
} else {
set args $vorigargs($view)
}
if {[catch {
set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
--parents --boundary $args "--" $files] r]
} err]} {
error_popup "[mc "Error executing git log:"] $err"
return 0
}
默认情况下,查看特定文件,即当$files
不为空时,启用git log
调用的内容。我发现这里的文档有点混乱,但简而言之,如果没有--full history
,当父级包含当前格式的文件时,Git将删除一些合并父级
请注意,--完整历史记录
不包括在选项中,但其中一个选项是$args
,它至少有时是基于$vflags($view)
设置的,$vflags
可能包括--完整历史记录
如果你直接使用<代码> Git Log,考虑添加< <代码> -完整的历史< /代码>和<代码> -M>代码>。默认情况下,
git log
不会查看合并的差异。-m
标志使它将每个合并拆分为每个父级的一个提交对(父级-n vs子级),然后查看每个差异
我不确定这是否或如何影响
gitk
,因为gitk
对git rev list
做了额外的工作,但也可能需要将-m
添加到gitk
的选项中。你查看过你的ref日志(git reflog
)了吗?这取决于你知道什么。有帮助吗?还可以看到答案…我对纯git版本非常酷。当我做'git-m--full history version.txt'时,我得到了很多合并(30+),其中version.txt的内容没有改变。我只想要合并,其中version.txt在合并版本中与父版本之一不同。。。。。有没有办法做到这一点?不幸的是,git log
(-c
或--cc
)的其他选项使用组合差异,并将跳过子项(合并)与父项匹配的任何合并。-m
选项用于在version.txt
与父项之一不匹配的地方进行合并。也就是说,你现在得到了你所要求的,只是许多合并包括了你所要求的,这表明你需要要求一些不同的东西。