在git pull --rebase之后显示提取的提交

时间:2014-09-02 12:03:19

标签: git rebase pull

有没有办法在执行git pull --rebase后查看从远程存储库中提取的提交?

换句话说:git pull将在结尾显示已更改文件的摘要(如git diff --stat)。 Git pull --rebase没有。如果可能的话,我怎么能看到这些信息?

我知道这可以在正常git pull之后或首先通过手动git fetch进行,比较本地&使用git log master..origin/master --stat或类似的远程分支,但这在git pull --rebase之后无效,除非我做错了...

澄清一下,我的问题是两部分:
1)如何在git pull --rebase之后查看diffstat(已更改文件的摘要),类似于git pull显示的内容。
2)如何查看所有新"传入"的日志在git pull --rebase之后提交。

2 个答案:

答案 0 :(得分:11)

实际上,git rebase一直都有这个(好吧,因为1.6.something)。请注意,git pull仅为git fetch,后跟git mergegit rebase(由各种选项和设置指示)。也就是说,git pull执行一对底层的git操作。

完成git pull后它不起作用的原因是git pull实际上就是那对操作,如果你只做了一对,可能没有带来新的变化通过 second git fetch,所以没有什么新东西可以显示。如果您使用您的reflog历史记录将项目重置为第一个操作对之前的状态,则第二对操作将显示一些内容。

您可以(我看到VonC has already noted)使用您自己的reflog获取有关上游或本地分支中已更改内容的事后报告。但是大概你想在下一个 git pull上看到这个,即使它有一个rebase,这也是一个偷偷摸摸的git默认值的来源。

如果您手动将--stat添加到git pull行,pull脚本会将此选项传递给git mergegit rebase(无论运行哪一个) )。如果您保留此选项,git将依赖于默认选项。

--stat的默认git merge选项是配置merge.stat中的设置,默认为True --stat的默认git rebase选项是配置rebase.stat中的设置,默认为False

让我再说一遍,因为它只是特殊和非显而易见(我只是因为你的问题而发现了这一点 - 我通常会自己避免git pull)。

--stat的默认merge选项为True,但--stat的默认rebase选项为False

如果您自己设置默认值,则可以显示统计信息输出。

或者,您可以将明确的--stat传递给git pull

请注意,您也可以将pull.rebase设置为True,意味着默认为重新定位,或preserve,也就是说默认为使用--preserve进行rebase,或者branch.name.rebase(至Truepreserve),git pull使用--rebase。这与您是否将--stat作为pull参数提供无关。


编辑:VonC的答案已经消失(至少现在),但各种评论中有一些内容。事后使用的诀窍是,当git fetch更新origin/develop时,您自己的 reflog现在包含origin/develop@{1}:您之前为{{1}的值在origin/develop更新之前。因此,您可以选择git fetch附带的修订集。使用origin/develop@{1}..origin/develop区分这两个将获得所需的输出。请注意,您可能(或可能不依赖于您的特定shell)必须引用--stat部分中的花括号。

答案 1 :(得分:1)

您可以尝试(在git pull --rebase之后)访问the reflog
(见git rev-parse SPECIFYING REVISIONS

@\{<n>\}, e.g. @{1}
  

您可以使用带有空参考部分的@构造来获取当前分支的 reflog条目
  例如,如果您在分支blabla上,则@{1}表示与blabla@{1}相同。

此处origin/master@{1}会在<{em> origin/master之前引用fetch (因为pull = fetch + merge/rebase

要查看提取的提交,OP Q-BiC建议in the comments

git log "origin/develop@{1}"..origin/develop

话虽如此,torek&#39; solution更容易,因为它将为您完成这一步骤,--stat会自动传递给git fetch }。