【问题标题】:How difftool can show branch changes but avoiding merges?difftool 如何显示分支更改但避免合并?
【发布时间】:2021-04-22 08:23:06
【问题描述】:

如何使用 Difftool 显示两个修订之间的所有更改,避免在合并中进行更改?

我可以使用 git log 来显示这个命令的变化:

 git log --no-merges -p firstrevinbranch..lastrevinbranch

但是 git log 只显示变更集,而不是文件,所以我可以正确读取上下文。

有什么方法可以使用 difftool 来执行此操作并显示修订之间的更改购买避免合并? 我的意思是,在这样的场景中:

  A---B---C---D topic
 /       /      \
E---F---G---H---I master

我只想用 kdiff 显示提交 A、B 和 D 中所做的更改,避免使用 C,因此它是一个合并提交。

非常感谢。

【问题讨论】:

    标签: git version-control diff git-diff kdiff3


    【解决方案1】:

    简短的回答是“你不能”。

    长答案是您可以,但只能通过首先创建具有不同更改的新提交。换句话说,与其看看你现在拥有的东西,你可以做一些别的东西,然后看看那个。这样做所获得的价值将部分取决于你在做其他事情时的表现。

    这是事实。 (这些是快乐的事实还是悲伤的事实取决于你的观点。)在 Git 中,commit 存储了一个快照。它不存储更改。快照本身实际上就是一个存档。任何现有快照都无法更改,因此它是一个只读存档。

    当您将git difftoolkdiff3 一起使用时,您:

    • 让 Git 提取一个或多个提交,以便归档文件可以作为文件访问,而不是打包成仅 Git 的格式;那么
    • 在这些文件上运行kdiff3,也许让它与您当前的工作树(一个选项)或另一个提取的存档(另一个选项)进行比较。

    所以,以你的例子为例:

      A---B---C---D topic
     /       /     \
    E---F---G---H---I master
    

    您可以获取git difftool 以从提交A 或从提交BCD 或...直到I 提取快照。您也可以让它提取任何其他提交,然后在两次提取上运行 kdiff3,或者您可以使用第一次提取在该提交上运行 kdiff3 以及当前工作树中的任何内容。

    要查看通过拍摄B 中的快照 形成的假设快照中可能包含的内容,然后通过以下方式对该快照进行更改

    1. 发现从CD的变化;那么
    2. 将这些更改添加到B 中的快照

    您实际上必须首先执行第 1 步和第 2 步。结果可以存储在您喜欢的任何位置:临时目录、全新的存储库或您在 this 存储库中进行的提交(临时或永久)。 Git 可以帮助您进行新的提交。您从实际进行此类提交中获得的 取决于您,但最简单的方法是:

    • 签出提交B,创建一个新分支(可以是临时的或永久的):

      git checkout -b temp-branch <hash-of-B>
      
    • cherry-pick 提交D:

      git cherry-pick <hash-of-D>
      

    这一切的结果是一个新的提交J

            J   <-- temp-branch
           /
      A---B---C---D   <-- topic
     /       /     \
    E---F---G---H---I   <-- master
    

    J 中的快照与B 中的快照之间的差异D 中的快照之间的差异相同或相似在C 中。出于这个原因,您可能希望使用其他名称来调用提交J,例如D',但您调用它并不重要;这是一个新的提交,包含一个樱桃挑选结果的存档。

    【讨论】:

    • 非常感谢@torek,你让我明白了这个问题。这是一个遗憾,所以我所要求的功能是所有社区都知道的,并且可以肯定地开发了很多次(即:BitBucket 中的拉取请求的更改)。所以我认为正确的方法是编写一个脚本来列出所有涉及分支的提交并按照你提到的那样进行挑选。我想我会在几天内完成脚本并将其发布到这里。我通常将 Mercurial 与 TortoiseHg 一起使用,并实现了此功能。再次感谢。问候。
    猜你喜欢
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2011-07-25
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多