有没有办法在执行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
之后提交。
答案 0 :(得分:11)
实际上,git rebase
一直都有这个(好吧,因为1.6.something)。请注意,git pull
仅为git fetch
,后跟git merge
或git 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 merge
或git 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
(至True
或preserve
),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
}。