Git: 如何查看由于推送而进行的更改?

20

我不太清楚如何查看远程代码库中由“push”更改的确切内容。“git log”只显示我本地代码库中发生的提交历史记录,并在不同时间进行了推送。我想知道哪些提交是属于每个特定的“push”。

2个回答

23

实际上,您可以从reflog中获取这些信息。它不是远程存储库的完整历史记录,而是您本地存储库分支的历史记录。因此,您将无法看到其他人对远程存储库所做的更改。虽然不太美观,但您可能可以编写脚本使其更容易。

例如:

$ git reflog show origin/master
ca4f119 refs/remotes/origin/master@{0}: pull --rebase: fast-forward
d303ece refs/remotes/origin/master@{1}: pull --rebase: fast-forward
ce28c26 refs/remotes/origin/master@{2}: pull --rebase: fast-forward
0f71883 refs/remotes/origin/master@{3}: pull --rebase: fast-forward
8c2f0dd refs/remotes/origin/master@{4}: pull --rebase: fast forward
2958d6c refs/remotes/origin/master@{5}: update by push
6e9558c refs/remotes/origin/master@{6}: pull --rebase: fast-forward
8854b35 refs/remotes/origin/master@{7}: pull --rebase: fast-forward
b96f25d refs/remotes/origin/master@{8}: pull --rebase: fast-forward
efb0ab8 refs/remotes/origin/master@{9}: pull --rebase: fast-forward
71c12ca refs/remotes/origin/master@{10}: pull --rebase: fast-forward
d860e59 refs/remotes/origin/master@{11}: update by push
6342dbb refs/remotes/origin/master@{12}: fetch: fast-forward
...

您可以看到,我的最新push将 origin/master6e9558c 推进到了 2958d6c。 要查看提交记录,您可以使用 git log 6e9558c..2958d6c 命令。例如:

$ git log --abbrev-commit --pretty=oneline 6e9558c..2958d6c
2958d6c Commit Summary 4
5cbe548 Commit Summary 3
13d007c Commit Summary 2
4f19ac3 Commit Summary 1
如果你可以访问远程仓库的终端,你可以在该终端上执行类似操作,以查看所有已经推送到该仓库的提交记录。

4
能否获取带有时间戳的日志? - user
3
@user,你的意思是像这样吗:“git reflog show origin/master --date=iso”? - invzbl3

3

Git不会记录哪些提交是属于哪个“push”操作的;仓库要么包含一系列提交,要么不包含。Git不关心提交是如何到达仓库的,无论是三个提交作为一个推送的一部分,还是每个提交都是在单独的推送中完成的。


1
这并不完全正确 - reflog 将会记住每个分支 tip 的所有更改。多次提交的推送将在 reflog 中显示为单个更改。请参见下面的答案。 - Pat Notz
没错,但是 reflog 实际上并不是仓库的一部分。特别地,你无法在没有直接访问仓库的情况下查看远程 reflog(例如,你无法查看 Github 上仓库的 reflog)。 - Greg Hewgill
但是Github通过他们的API也暴露了类似的功能:https://objectpartners.com/2014/02/11/recovering-a-commit-from-githubs-reflog/ - Beni Cherniavsky-Paskin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接