代码之家  ›  专栏  ›  技术社区  ›  Greg Hewgill

如何获取Git中分支的更改

  •  243
  • Greg Hewgill  · 技术社区  · 16 年前

    自分支从当前分支分支分支以来,获取分支上提交日志的最佳方法是什么?到目前为止,我的解决方案是:

    git log $(git merge-base HEAD branch)..branch
    

    文件 git-diff 表明 git diff A...B 等于 git diff $(git-merge-base A B) B . 另一方面,文件 git-rev-parse 表明 r1...r2 定义为 r1 r2 --not $(git merge-base --all r1 r2) .

    为什么这些不同?注意 git diff HEAD...branch 给出了我想要的diff,但是相应的git log命令给出的比我想要的更多。

    在图片中,假设:

             x---y---z---branch
            /
    ---a---b---c---d---e---HEAD
    

    我想要一个包含提交x,y,z的日志。

    • Git Diff头…分支 做出这些承诺
    • 然而, git log HEAD...branch 给出x,y,z,c,d,e。
    9 回复  |  直到 8 年前
        1
  •  171
  •   Marcin    10 年前

    在修订列表的上下文中, A...B 是怎样 git-rev-parse 定义它。Git日志采用修订列表。 git-diff 不接受修订列表-它需要一个或两个修订,并定义了 A…B 语法来表示它在 GIT差异 木版纸。如果 GIT差异 没有明确定义 A…B ,则该语法将无效。请注意 Git Rev解析 手册页描述 A…B 在“指定范围”部分中,该部分中的所有内容仅在修订范围有效(即需要修订列表)的情况下有效。

    要获取仅包含x、y和z的日志,请尝试 git log HEAD..branch (两个点,不是三个)。这和 git log branch --not HEAD 也就是说,所有不在头上的分支上的承诺。

        2
  •  63
  •   towi    12 年前
    git cherry branch [newbranch]
    

    当你在 master 分支机构。

    我也很喜欢:

    git diff --name-status branch [newbranch]
    

    这不是你想要的,但在同样的情况下仍然非常有用。

        3
  •  32
  •   Debajit    12 年前

    您希望看到的是传出提交的列表。你可以用

    git log master..branchName 
    

    git log master..branchName --oneline
    

    我假设“branchname”是作为“master”的跟踪分支创建的。

    同样,要查看传入的更改,可以使用:

    git log branchName..master
    
        4
  •  22
  •   Peter Mortensen icecrime    8 年前

    这与我发布的答案类似: Preview a Git push

    将这些函数放到您的bash概要文件中:

    • gbout-Git分支传出
    • gbin-git分支传入

    您可以这样使用:

    • 如果在master上:gbin branch1<--此 将向您显示Branch1中的内容 不精通
    • 如果在主控形状上:gbout branch1<--这将向您显示 不在第一分队的主队

    这将适用于任何分支。

    function parse_git_branch {
      git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
    }
    
    function gbin {
        echo branch \($1\) has these commits and \($(parse_git_branch)\) does not
        git log ..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
    }
    
    function gbout {
        echo branch \($(parse_git_branch)\) has these commits and \($1\) does not
        git log $1.. --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
    }
    
        5
  •  12
  •   Peter Mortensen icecrime    8 年前

    类似于亚历克斯五世和恩达维斯的几个答案,但没有一个是完全相同的。

    当已经在讨论中的分支中时

    使用:

    git diff master...
    

    它结合了多种功能:

    • 它太短了
    • 显示实际更改

    更新:

    这应该是 git diff master 但这也显示了差异,而不是指定问题的提交。

        6
  •  8
  •   Alex V    10 年前

    将a-p放入其中以查看一些文件更改

    git log -p master..branch
    

    制作一些别名:

    alias gbc="git branch --no-color | sed -e '/^[^\*]/d' -e 's/* \\(.*\\)/\1/'"
    
    alias gbl='git log -p master..\`gbc\`'
    

    查看分支机构的独特承诺:

    gbl
    
        7
  •  6
  •   NDavis    9 年前

    要查看从master分支后当前分支的日志,请执行以下操作:

    git log master...

    如果您当前在master上,要查看另一个分支的日志,因为它已从master上分支:

    git log ...other-branch

        8
  •  4
  •   nopsoft    13 年前
    git log --cherry-mark --oneline from_branch...to_branch
    

    (3dots)但有时显示“+”而不是“=”

        9
  •  2
  •   Dominik Ehrenberg    11 年前

    我发现

    git diff <branch_with_changes> <branch_to_compare_to>
    

    更有用的是,因为您不仅获得了提交消息,而且还获得了整个差异。如果您已经在分支上,那么您希望看到和(例如)希望看到对主服务器的更改,您可以使用:

    git diff HEAD master