一位同事从大师那里创建了一个本地分支('branchA'),做了一些工作,推动了它,在master中合并,做了一些工作并再次推送它。同时,其他同事一直致力于其他分支机构并将它们合并到掌握中。
现在我需要拉动branchA来检查它。所以我做了git pull
和git checkout -b branchA origin/branchA
这很好。但所有命令(git diff / log / show)都显示了repo中所有分支的提交。
如何根据创建它的master版本查看对branchA所做的所有提交的差异?
另外,我如何git diff
branchA对抗当前主人的HEAD,但只能查看branchA中更改的文件?
答案 0 :(得分:11)
以下内容适用于您的第二个问题,即如何查找branchA
与您当地的master
当前版本之间的差异。您希望在git log
中使用“双点”语法来查看branchA
中不在master
中的所有提交。即:
git log master..branchA
根据git log
手册页:
SYNOPSIS
git log [<options>] [<since>..<until>] [[--] <path>...]
...
<since>..<until>
Show only commits between the named two commits. When either <since> or <until> is omitted, it defaults to HEAD, i.e. the tip of the current branch.
For a more complete list of ways to spell <since> and <until>, see gitrevisions(7).
如果您希望在master
或branchA
中看到提交,但两者都没有,则可以使用'triple-dot'语法:
git log master...branchA
最后,您可以使用与git diff
完全相同的语法,即git diff master..branchA
和git diff master...branchA
。
另外,如果您已branchA
签出,则甚至无需将其指定为<until>
。如果未指定,Git将假设HEAD
,因此这两组命令是等效的:
git checkout branchA
git log master..
和
git log master..branchA
答案 1 :(得分:2)
git diff master..brnachA
:将比较master和branchA的HEAD之间的所有已修改文件。git diff master...brnachA
:将branchA与其创建的master版本进行比较。 FYI:git diff
将在命令行中生成输出。如果要在某些可视化工具中查看输出,请使用git difftool
。
您也可以将所有git diff
参数和选项传递给git difftool
。
答案 2 :(得分:0)
这将显示特定分支的登录
答案 3 :(得分:0)
Git提交不保留有关他们提交的“哪个分支”的信息。他们只给你一个可以走回来的树。合并发生后,您无法从合并提交中确定哪个父级来自您从哪个分支开始。这在一些细节over here中进行了讨论。
这是我的理解。如果我错了,我很乐意纠正。
答案 4 :(得分:0)
git log HEAD..branch。
点击此处了解更多详情:How to get the changes on a branch in git