在git中查找文件更改的每个合并/提交

时间:2017-12-06 17:30:25

标签: git

我有一堆工作已经失去了#34;在我们的git存储库中。即我提交了一些文件,有人在某处进行了合并,并且#34;丢失了#34;我所有的改变。我正在努力确定这种情况发生的方式/地点。当我使用此question中的此命令查看我的文件更改日志时:

  

gitk --all - version.txt

我得到以下屏幕截图:

enter image description here

此文件由我们的构建系统管理,它应包含字符串

1.0.94.0

至少,基于我在上面的截图中看到的内容。但事实上,它实际上包含字符串:

1.0.92.0

在挖掘存储库时,有人执行了合并,并且合并使用内容1.0.92.0覆盖了version.txt。但是这个合并没有出现在我的gitk输出中。有没有办法运行gitk(或git)来显示修改我文件的所有合并和提交?

1 个答案:

答案 0 :(得分:1)

值得尝试将--full-history添加到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调用History Simplification的内容。我发现这里的文档有些令人困惑,但简而言之,如果没有--full-history,当父代包含当前格式的文件时,Git将修剪一些合并父项。

请注意,--full-history 包含在选项中,但其中一个是$args,至少有时会根据$vflags($view)进行设置,并且$vflags可能包含--full-history

如果您直接使用git log,请考虑同时添加--full-history -m。默认情况下,git log不会查看合并的差异。 -m标志使它将每个合并拆分为每个父级一个提交对(parent- n vs child),然后查看每个差异。

我不确定这会影响gitk是否或如何影响gitk,因为git rev-list会对-m执行额外的工作,但可能会添加gitk也需要$content .= "Position(s) applied for: "; $content .= implode(',' $_POST['aJob']); 的选项。