首页 文章

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

提问于
浏览
1860

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

看到这个链接: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"

想知道是否有我遗漏的东西......

14 回答

  • 2287

    比较当前分支与 master

    $ git diff --name-status master
    

    比较任何一对分支

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

    如果我理解正确的话,那应该做你需要的 .

  • 149

    尝试

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

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

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

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

    还要记住,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 分支并重新开始 .

  • 31

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

    git diff master..otherbranch > myDiffFile.diff
    
  • 28

    还有一种基于GUI的方法 .

    你可以使用 gitk .

    • 运行:
    $ gitk --all
    
    • 右键单击分支的提交,然后在弹出菜单中选择“标记此提交” .

    • 右键单击另一个分支的提交,然后选择Diff this - > marked commit或Diff marked commit - > this .

    然后,右下方面板中将显示已更改的文件列表,左下方面板中将显示diff详细信息 .

  • 30

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

  • 4

    还有一个选择,在这种情况下使用meld:

    git difftool -d master otherbranch
    

    这不仅可以查看文件之间的差异,还可以提供指向和单击特定文件的简便方法 .

  • 9

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

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

    git fetch
    git diff origin/master...
    

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

  • 4

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

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

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

    git diff master -- controller/index.js
    
  • 14

    如果您使用IntelliJ IDEA,还可以将任何分支与当前工作分支进行比较 . 有关详细信息,请参阅http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 . 这也可以在free edition中找到 .

  • 47

    可以说有两个分支

    • A(你工作的分公司)

    • B(您想要比较的另一个分支)

    在分支A,你可以打字

    git diff --color B
    

    那么这会给你一个输出

    enter image description here

    关于这一点的重点是

    • 绿色文本位于分支A中

    • 分支B中存在红色文本

  • -2

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

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

    git diff ..master
    

    要么

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

    git diff master..
    
  • 366

    如果你喜欢GUI并使用Windows,这是一个简单的方法 .

    • 下载WinMerge

    • 将两个分支签出到不同的文件夹中

    • 使用WinMerge按文件夹比较执行文件夹 . 如果其中一个分支是您正在处理的分支,您也可以轻松地进行修改 .

  • 0

    您还可以使用例如 TortoiseGit 轻松比较已更改文件的分支 . 只需单击 Browse References 并选择所需的分支比较 .

    例如,如果您将分支与主分区进行比较,那么如果您决定将分支合并为主分支,则将获得将在主分区中更改的文件列表 .

    如果您将master与您的分支和您的分支与master进行比较,请记住您将获得不同的结果 .

相关问题