【问题标题】:How to view the changes between start and finished in a file that has undergone numerous commits?如何在经历了多次提交的文件中查看开始和结束之间的更改?
【发布时间】:2020-02-25 13:37:05
【问题描述】:

假设一个文件经历了许多修改和提交。

最终,那些更改的内容也需要提取到另一个基线。

这里是场景。

 - Start Here.
 - Edit & Commit 1
 - Edit & Commit 2
 - Edit & Commit 3
   :
   :
 - Edit & Commit n
 - Final Commit

使用 gitk 它会列出每个单独的提交。 通常这是一个不错的工具,但在这种特定情况下,每个 Edit & Commit 都可能添加新代码并删除先前提交中完成的代码。在场景中提取代码很麻烦,因为您可能会发现在其他地方添加/删除/移动/添加了相同的代码......

我只想看到之前(从这里开始)和之后(最终提交),而不关心各种提交。

是否有可用的工具让我可以简单地查看“Start HERE”和“Final Commit”之间的变化?

【问题讨论】:

  • 这能回答你的问题吗? Generate diff file of a specific commit in git
  • 除非我没有正确实现它,否则我看不到我期望看到的内容。我先做了一个“git log ”。该文件有 3 次提交。然后我执行了“gitk
  • git diff,不是gitk
  • 是的,与 "git diff" 或 gitk 的结果相同。包含提交时,有相当大的变化是不可见的。

标签: git diff


【解决方案1】:

gitk 有一个“标记此提交”操作,

一旦您标记了第一次提交,您将在第二次提交上看到额外的操作,例如:“与标记的提交比较”。


更一般地说:您正在寻找一种方法来查看两次提交之间的差异(“Start HERE”和“Final Commit”)。

还有很多其他方法可以做到这一点:

  • 在终端中:

    git diff <commitA> <commitB> -- some/file
    
  • 打开图形差异工具:

    git difftool <commitA> <commitB> -- some/file
    # look for 'diff.tool' in 'git help config' for details on difftool
    
  • 所有 git 的 gui 前端(如gitk,还有git guigit-krakengit-extensions 等...)都有比较两个提交的方法,

    带有“标记第一次提交”/“与第二次提交的差异”(如gitk),
    或者通过允许选择两个提交(ctrl+Click)和一个“diff selected commits”操作


告诉gitk 专注于一组特定的文件(或单个文件):

您可以使用过滤选项启动gitk

gitk -- some/files

或者,一旦 gitk 打开,您可以执行“查看 > 新视图 ...”操作,
将打开一个对话框,在底部附近有一个文本字段“输入要包含的文件和目录,每行一个”。

【讨论】:

  • 这似乎对 2 次提交之间的所有文件进行了比较。如果总共涉及 10 个文件,则可能仅显示受此提交影响的 3 个文件。是否可以一次专注于 1 个特定文件?
  • 另外,如果一个文件有 3 次提交,您是在文件上标记您的第一次提交,还是在修复之前标记修复的最终提交?我想知道如果我选择第一次提交,它不会错过原始更改吗?
  • 我知道的一种方式:您可以在打开 gitk 时过滤文件:gitk some/filegitk -- some/file; diffs 将只显示对该文件的修改
  • (对您的第二条评论):git 实际上将每个文件的全部内容存储在其每个提交中;差异在“commitA 中的全部内容”和“commitB 中的全部内容”之间。
  • 在我碰巧使用的一个文件中有两个提交。查看每个单独的提交对于这个文件来说并不算太糟糕,但是在进行“比较”时,还有许多其他带有 -+ 和 - 的行,而这些行实际上都不是提交的一部分。通过进行比较,它在输出中添加了大约两倍的带有各种 - 或 -+ 的行,这些完全不相关且未经修改,实际上提取更改更加麻烦。
【解决方案2】:

这是我必须做的。 不确定是不是上面的帖子。

 - My Final Edit & Commit 
 - My Edit & Commit 2
 - My Initial Edit & Commit 1    <----Don't use this.
 - Someone Else Edit & Commit    <----Use this as the first commit
 - Original File 

最初我正在做以下差异,它没有向我显示所有更改。

 git diff <My Initial Edit & Commit 1> <My Final Edit & Commit> <myFile>

我必须做的:

 git diff <Someone Else Edit & Commit> <My Final Edit & Commit> <myFile>

一旦我在第一次提交之前进行了提交,我就可以在一个摘要中看到所有更改。

不确定上述回复是否实际说明了这一点。

另外,如果该文件只有我的 3 处更改并且之前没有更改或提交参考,我发现自己的原始问题是没有看到所有修改。

【讨论】:

    猜你喜欢
    • 2018-09-25
    • 2019-12-07
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多