17 题: 显示两个修订版之间已更改的文件

在...创建的问题 Mon, Sep 7, 2015 12:00 AM

我想合并两个已分开一段时间的分支,并想知道哪些文件已被修改。

遇到此链接: http://linux.yyz.us/git-howto.html 非常有用。

比较我遇到的分支的工具是:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

想知道是否有类似“git status master..branch”之类的内容,只能看到两个分支之间不同的文件。

如果不创建新工具,我认为这是您现在最接近的工具(如果文件被多次修改,当然会显示重复):

  • git diff master..branch | grep "^diff"

想知道我错过了什么......

    
1966
  1. 有多少人认为这个问题的标题具有误导性?它实际上是关于找到两个分支之间的文件差异。我在这里寻找的是如何在同一分支上查看两个修订版之间的文件差异。或者我是唯一的一个?
    2016-03-18 10:19:28Z
  2. @ SandeepanNath:使用git没有任何区别。你总是提到个人提交。
    2016-03-21 02:54:41Z
  3. @ SamuelO'Malley我是git的新手,并考虑了看似常见的分支策略,其中所有分支最终合并到主分支,最终主人推出。现在,考虑到推出的事件,其中生产已经处于主要状态,但是在提示之后(如果最后一次推出发生在最后一次主合并之后,则通过一次修订),我希望看到这两次修订之间的差异,找出将要推出的内容。我不想看看最后合并的分支。如果我错了,请纠正我。
    2016-03-21 06:22:16Z
  4. @ SandeepanNath:您可以使用下面的答案而不是使用分支名称,而只需指定提交ID。如果在推出时创建标记,甚至可以通过标记名称引用提交。
    2016-03-21 06:50:01Z
  5. @ SandeepanNath您无法比较2个分支,您必须指定修订版本。因此比较2个分支是比较2个修订。
    2017-12-15 15:37:46Z
  6. 醇>
    17答案                              17 跨度>                         

    将当前分支与master分支进行比较:

     
    $ git diff --name-status master
    

    比较任何两个分支:

     
    $ git diff --name-status firstbranch..yourBranchName
    

    官方文档中阅读git diff

        
    2410
    2019-02-22 10:16:00Z
    1. 左侧每个指数的含义是什么(我看到很多M和D)?
      2013-04-05 18:25:00Z
    2. @ user446936 - 您可以在git status手册页中看到字母的含义@ kernel.org/pub/software/scm/git/docs/git-status.html - 特别是,M ==修改,D ==删除
      2013-04-11 18:34:42Z
    3. git diff --name-status your_branch...master输出自从your_branch创建以来在master上发生的更改
      2013-08-20 10:38:17Z
    4. 这里的双点运算符是多余的,因为差异是成对的。
      2015-09-07 11:54:08Z
    5. 我在工作树中得到未知修订版或路径。
      2015-10-15 14:18:14Z
    6. 醇>

    尝试

     
    $ git diff --stat --color master..branchName
    

    这将为您提供有关每项更改的更多信息,同时仍然使用相同数量的行。

    如果要以其他方式合并,您还可以翻转分支以更清晰地了解差异:

     
    $ git diff --stat --color branchName..master
    
        
    381
    2012-02-01 23:34:01Z
    1. 如果你有(强烈推荐,imho)git颜色打开(config --global color.ui true),你可以跳过--color。 (我有lks - 懒惰的键盘综合症。)
      2012-03-10 21:35:24Z
    2. 我和你在一起的颜色!顺便说一句,我的意思是git config --global color.ui true - 要完整。
      2012-03-10 22:13:36Z
    3. 不起作用,抛出错误:fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree.
      2017-01-18 15:15:11Z
    4. @TomášZato抱歉,您需要将“branchName”与您的分支名称交换。
      2017-01-30 12:01:32Z
    5. 醇>

    另请注意,git具有便宜且易于分支的特点。如果我认为合并可能有问题,我会为合并创建一个分支。因此,如果master有我要合并的更改,而ba是我的分支需要来自master的代码,我可能会执行以下操作:

     
    git checkout ba
    git checkout -b ba-merge
    git merge master
    .... review new code and fix conflicts....
    git commit
    git checkout ba
    git merge ba-merge
    git branch -d ba-merge
    git merge master
    

    最终的结果是我必须在一个扔掉的分支上尝试合并,然后再拧紧我的分支。如果我自己纠缠不清,我可以删除ba-merge分支并重新开始。

        
    151
    2012-10-11 01:22:19Z
    1. 太棒了。我从未想过以这种方式分支。我认为这应该被视为合并时“最佳实践”的一部分。
      2015-07-01 14:08:24Z
    2. 当您将ba-marge合并回ba时,是否有可能再次修复冲突?
      2017-05-02 02:48:03Z
    3. 不,你已经解决了它们。
      2017-05-02 02:48:57Z
    4. @ EricAnderson对,这是一张图。 SVN在学校课桌下像胶一样粘。 THX。
      2017-05-02 04:10:57Z
    5. 如果ba-merge已经拥有主人,为什么你需要做最后一步'git merge master'
      2018-09-04 14:30:58Z
    6. 醇>

    如果有人试图从两个分支生成diff文件:

     
    git diff master..otherbranch > myDiffFile.diff
    
        
    53
    2013-04-03 14:01:39Z
    1. 这已经出现了尤其是大分支包含很多差异。
      2015-04-07 18:07:53Z
    2. 当差异非常大时,这很有用。默认情况下,它不会在控制台中显示所有差异(我想知道为什么),将diff传递给文件就是这种情况下的方法。
      2019-05-03 07:52:12Z
    3. 醇>

    还有一种基于GUI的方法。

    您可以使用 gitk

    1. 执行命令

       
      $ gitk --all
      
    2. 右键单击分支提交,然后在弹出菜单中选择标记此提交

    3. 右键单击另一个分支的提交,然后选择 Diff this - >标记提交 Diff标记提交 - >此
    4. 醇>

      然后在右下方面板中会有一个更改的文件列表,并在左下方面板中显示差异细节。

          
    35
    2014-09-10 22:15:11Z
    1. 2015-10-20 09:43:37Z
    2. 哇,只为了我,我觉得很特别。我已经在delicious.com上为它添加了书签以供将来参考和额外的google-foo。
      2015-10-21 15:29:16Z
    3. 醇>

    在这种情况下使用meld的另一个选择是:

     
    git difftool -d master otherbranch
    

    这不仅可以查看文件之间的差异,还可以轻松指向并单击特定文件。

        
    32
    2014-04-24 13:23:31Z
    1. 可能想将meld设置为默认的difftool:git config --global diff.tool meld
      2014-09-08 15:19:31Z
    2. 这是我的最爱,因为它会使用你配置的任何difftool。
      2017-03-03 15:08:16Z
    3. OSX不支持。 : - (
      2018-06-10 12:36:42Z
    4. @ MikeS。请查看此答案 stackoverflow.com/a/12815806/151918 ,其中包含有关OSX的说明。它至少对我有用,希望它有所帮助。
      2018-06-11 10:39:08Z
    5. 很好。但是什么是-d选项?
      2018-09-05 09:33:34Z
    6. 醇>

    请注意,如果您不喜欢结果,git可以轻松尝试合并并避免任何问题。它可能比提前寻找潜在问题更容易。

        
    29
    2009-05-05 00:59:54Z
    1. 大卫,这是一个很好的观点,虽然只是知道手头发生了什么事情真好...
      2009-05-05 01:14:35Z
    2. 醇>

    如果您只在某些文件中查找更改,则:

     
    git diff branch1 branch2 -- myfile1.js myfile2.js
    

    branch1是可选的,如果未提供branch1,则默认情况下将考虑当前分支(您所在的分支)。 e.g:

     
    git diff master -- controller/index.js
    
        
    15
    2016-05-30 18:38:37Z

    当协同工作或同时处理多个功能时,通常上游甚至主人包含未包含在分支中的工作,并且会错误地出现在基本差异中。

    如果您的上游可能已经移动,您应该这样做:

     
    git fetch
    git diff origin/master...
    

    使用git diff master可以包含或不包含相关更改。

        
    14
    2016-03-17 03:12:13Z

    如果您使用的是 IntelliJ IDEA ,您还可以将任何分支与您当前的工作分支进行比较。请参阅 http://www.jetbrains.com/idea /webhelp /mergeging-deletion-comparative-comparison-branches.html#d288093e3827 了解更多信息。这也可以在免费版中找到。

        
    9
    2013-06-06 07:17:35Z

    有两个分支可以说

    • A(你工作的分公司)
    • B(您要比较的另一个分支)

    在分支A中,您可以输入

     
    git diff --color B
    

    然后这会给你输出

    关于这一点的重点是

    1. 绿色的文字位于分支A

    2. 分支B中有红色文字

    6
    2016-10-04 11:56:48Z

    这里有很多答案,但我想添加一些我常用的东西。如果您位于要比较的分支之一,我通常会执行以下操作之一。为了这个答案,我们会说我们在二级分支机构。取决于您当时所需的视图取决于您选择的视图,但大部分时间我使用的是第二个选项。如果您试图恢复原始副本,第一个选项可能很方便 - 无论哪种方式,都可以完成工作!

    这将比较master和我们所在的分支(这是次要的),原始代码将是添加的行,新代码将被视为已删除的行

     
    git diff ..master
    

    OR

    这也会比较master和我们所在的分支(这是次要的),原始代码将是旧行,新代码将是新行

     
    git diff master..
    
        
    6
    2017-05-31 22:00:58Z

    如果您喜欢GUI并使用Windows,这是一种简单的方法。

    1. 下载WinMerge
    2. 将两个分支签出到不同的文件夹
    3. 使用WinMerge按文件夹比较执行文件夹。如果其中一个分支是您正在处理的分支,您也可以轻松地进行修改。
    0
    2018-06-19 23:21:20Z
     
    git diff revision_n revision_m
    

    如果revision_nrevision_m是连续提交,那么它输出相同  git show revision_m

        
    0
    2019-03-01 10:07:13Z

    对于正在寻找GUI解决方案的人来说, Git Cola 有一个非常好的“分支机构”差异查看器(差异 - > 分支.. )。

        
    0
    2019-04-17 05:04:24Z

    您还可以使用 视觉差异

    例如,如果您使用 Sourcetree ,则只需在日志视图中选择任意两个提交

    (我个人更喜欢在大多数情况下使用GUI,而且我是为那些可能不熟悉GUI选项的人发布的。)

        
    0
    2019-06-27 16:16:33Z

    您还可以使用例如 TortoiseGit 轻松比较已更改文件的分支。只需点击 浏览参考 ,然后选择您要比较的分支机构。

    例如,如果您将您的分支 master 进行比较,那么您将获得将在 master 中更改的文件列表决定将 your-branch 合并到 master 中。

    如果您将您的分支您的分支 master进行比较,那么您将会有不同的结果

        
    - 2
    2017-10-18 09:53:19Z
    1. 问题似乎是关于本机git实用程序
      2018-01-30 14:52:33Z
    2. 醇>
来源放置 这里