当前位置:  开发笔记 > 编程语言 > 正文

如何在Git中的分支上获取更改

如何解决《如何在Git中的分支上获取更改》经验,为你挑选了7个好方法。

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

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给了我想要的差异,但相应的git log命令给了我更多的东西.

在图片中,假设:

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

我想得到一个包含提交x,y,z的日志.

git diff HEAD...branch 给出了这些提交

但是,git log HEAD...branch给出x,y,z,c,d,e.

Lily Ballard.. 180

在修订列表的上下文中,A...B是如何git-rev-parse定义它的.git-log采用修订列表.git-diff不采用修订列表 - 它需要一个或两个修订,并已定义A...B语法以表示它在git-diff联机帮助页中的定义方式.如果git-diff没有明确定义A...B,那么该语法将无效.请注意,git-rev-parse联机帮助页A...B在"指定范围"部分中进行了描述,该部分中的所有内容仅在修订范围有效的情况下有效(即需要修订列表时).

要获取仅包含x,y和z的日志,请尝试git log HEAD..branch(两个点,而不是三个点).这与git log branch --not HEAD在HEAD上不在的分支上的所有提交相同.



1> Lily Ballard..:

在修订列表的上下文中,A...B是如何git-rev-parse定义它的.git-log采用修订列表.git-diff不采用修订列表 - 它需要一个或两个修订,并已定义A...B语法以表示它在git-diff联机帮助页中的定义方式.如果git-diff没有明确定义A...B,那么该语法将无效.请注意,git-rev-parse联机帮助页A...B在"指定范围"部分中进行了描述,该部分中的所有内容仅在修订范围有效的情况下有效(即需要修订列表时).

要获取仅包含x,y和z的日志,请尝试git log HEAD..branch(两个点,而不是三个点).这与git log branch --not HEAD在HEAD上不在的分支上的所有提交相同.


哇,那令人困惑.事实证明,使用"git diff HEAD..branch"显示所有提交(x,y,z,c,d,e),但"git log HEAD..branch"正是我想要的,只显示x,y ,z!这与使用"......"完全相反.
`git diff HEAD..branch`与`git diff HEAD branch`相同.这里要记住的关键是日志需要一个列表/范围的修订,而diff则没有.这就是他们以不同方式对待他们的args的原因.
似乎`git diff HEAD ... branch`(三个点)对应于`git log HEAD..branch`的输出

2> skiphoppy..:
git cherry branch [newbranch]

当你在master分支机构时,你正在做什么.

我也非常喜欢:

git diff --name-status branch [newbranch]

这不完全是你所要求的,但在相同的背景下仍然非常有用.


'git cherry'输出提交ID列表.我可以将这些转换为单个差异,并结合每次提交中的所有更改吗?
很难理解在命令中必须替换哪些代码,因为branch或newbranch中的哪一个是关键字,哪些应该用自定义分支名称替换
@JonathanHartley把第一个**和**最后一个**作为提交ID,并将它们抛给`gif-diff`:`git diff x..z`,或者对于我自己的例子,它是`git diff 13bc4d..8eda3a`.

3> PlagueHammer..:

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

git log master..branchName 

要么

git log master..branchName --oneline

我假设"branchName"被创建为"master"的跟踪分支.

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

git log branchName..master



4> Clintm..:

这类似于我发布的答案:预览Git推送

将这些功能放入Bash配置文件中:

gbout - git branch传出

gbin - git branch传入

你可以这样使用:

如果在master:gbin branch1 < - 这将显示branch1中的内容而不是master中的内容

如果在master:gbout branch1 < - 这将显示master中不在分支1中的内容

这适用于任何分支.

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> Michael Durr..:

类似于Alex V和NDavis等几个答案,但它们都不完全相同.

当已经在有问题的分支机构时

使用:

git diff master...

它结合了几个功能:

它超短

显示实际的变化

更新:

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



6> Alex V..:

在那里扔一个-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> NDavis..:

从master分支以来查看当前分支的日志:

git log master...

如果您当前在master上,要查看不同分支的日志,因为它分支了master:

git log ...other-branch

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有