我想列出仅属于特定分支的所有提交.
通过以下内容,它列出了分支中的所有提交,但也列出了父(主)的提交
git log mybranch
Run Code Online (Sandbox Code Playgroud)
我找到的另一个选项是排除master可以访问的提交并给我我想要的东西,但我想避免需要知道其他分支名称.
git log mybranch --not master
Run Code Online (Sandbox Code Playgroud)
我试图使用git for-each-ref,但它也列出了mybranch所以实际上它排除了所有:
git log mybranch --not $(git for-each-ref --format '^%(refname:short)' refs/heads/)
Run Code Online (Sandbox Code Playgroud)
更新:
我正在测试我刚才发现的一个新选项,直到现在看来这可能是我想要的:
git log --walk-reflogs mybranch
Run Code Online (Sandbox Code Playgroud)
更新(2013-02-13T15:08):
--walk-reflogs选项很好,但我检查了reflogs是否到期(默认为90天,gc.reflogExpire).
我想我找到了我想要的答案:
git log mybranch --not $(git for-each-ref --format='%(refname)' refs/heads/ | grep -v "refs/heads/mybranch")
Run Code Online (Sandbox Code Playgroud)
我只是从可用分支列表中删除当前分支,并使用该列表从日志中排除.这样我只能获得mybranch才能达到的提交.
以下命令之间有什么区别?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
Run Code Online (Sandbox Code Playgroud)
diff手册谈到它:
比较分支机构
Run Code Online (Sandbox Code Playgroud)$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- 主题提示与主分支之间的更改.
- 与上述相同.
- 自主题分支启动以来主分支上发生的更改.
但对我来说并不完全清楚.
我foo在master分支中有一个repo文件.我切换到酒吧分支并进行了一些更改foo.我现在如何git diff在此副本(尚未提交)和主分支副本之间运行?
在GitHub上比较同一分支的历史对我来说非常困惑.我经常挣扎:
如果我compare/master在github repo名称之后使用URL,我可以根据下拉菜单中的选项与repo中的其他分支进行比较
https://help.github.com/articles/comparing-commits-across-time/
但是,我通常想比较master上的几个提交.
这怎么容易做到?我能得到一个更明确的例子吗?
如果这不是很清楚,但是在Git,我有一种方法可以通过名称查看分支上所有已更改的文件.据我所知,我可以使用git log查看在单个提交中已更改的文件,但我希望看到自创建分支以来已经更改的所有文件,通过多次提交.
有git diff但是这也列出了我想要比较的分支中的已更改文件.我想要一个命令,"显示此分支中所有已更改文件的文件名".
非常感谢
有没有办法用于git diff在两次提交之间获取差异,但只显示两次提交中存在的文件的差异?
我有一个我几周前创建的分支,而且我们的主要代码现在已经差不多了.结果,如果我在当前的HEAD和旧分支的尖端之间做差异,我会得到几十个已更改的文件,但它主要只是噪音.
我真的想看到一个diff,它只显示两个分支中存在的文件.我知道这样做的一种方法是在当前的HEAD之上挑选其他分支的提交,但有没有办法只使用它git diff?
对于代码中的每个缺陷,我创建单独的分支.当缺陷修复后,我将这个分支合并到master中,所以我的历史如下图所示(我们看到两个分支有修复):
defect1 fix defect2 fix
a---b---c---d e---f
/ \ / \
---o---1---x---y---z---2---o---3---w---4---o---
Run Code Online (Sandbox Code Playgroud)
问题是如何在任何时间点(例如,对于过去的任何封闭缺陷)获取fix1(在分支开始(1)和分支结束(2)之间)或fix2(在(3)和(4)之间的差异)之间的差异.
更新:实际的问题是如何计算出的SHA summs a和d或e和f执行下一个明显的diff命令diff <commit> <commit>
我知道git diff branch1 branch2.但是,我希望仅在一个分支中看到更改.我可以通过以下方式获得此功能
git checkout branch1
git merge branch2
git reset origin/branch1
git diff
Run Code Online (Sandbox Code Playgroud)
有没有更短的方法来做到这一点?
git diff-tree表示文件已被删除,但是当我运行时git log,它没有显示任何内容.
以机智:
> git diff-tree --stat --summary 1990ca669fe..00de228dcdc -- t/tests.conf
t/tests.conf | 9 ---------
1 files changed, 0 insertions(+), 9 deletions(-)
delete mode 100644 t/tests.conf
Run Code Online (Sandbox Code Playgroud)
当我跑:
> git log 1990ca669fe..00de228dcdc -- t/tests.conf
Run Code Online (Sandbox Code Playgroud)
我没有输出.
任何想法我如何能够追踪为什么git认为这个文件已被删除,因为它也导致合并中的问题我正在尝试?
更新
这也不会产生任何输出:
> git log 1990ca669fe...00de228dcdc -- t/tests.conf
Run Code Online (Sandbox Code Playgroud)
提交可以访问:
> git rev-list 00de228dcdc | grep 1990ca669fe
1990ca669fe9ec94d215945388458daba8d94747
Run Code Online (Sandbox Code Playgroud)