Answers:
Git无法像Hg一样通过网络发送此类信息。但是您可以运行git fetch
(hg pull
比起来更像hg fetch
)从远程服务器获取新的提交。
因此,如果您有一个名为的分支master
和一个名为的远程服务器origin
,则在运行后git fetch
,还应该有一个名为的分支origin/master
。然后,你可以得到git log
所有提交的master
需要是的超集origin/master
做git log master..origin/master
。倒转这两个得到相反的结果。
我的一个朋友David Dollar创建了几个git shell脚本来进行仿真hg incoming/outgoing
。您可以在http://github.com/ddollar/git-utils上找到它们。
从Git 1.7.0开始,有一种特殊的语法可让您通用地引用上游分支:@{u}
或@{upstream}
。
模仿hg incoming
:
git log ..@{u}
模仿hg outgoing
:
git log @{u}..
我使用以下incoming
和outgoing
别名使上面的内容更易于使用:
git config --global alias.incoming '!git remote update -p; git log ..@{u}'
git config --global alias.outgoing 'log @{u}..'
git branch --set-upstream foo origin/foo
。
git log @{u}..
为我列出仓库中的每一个更改。它们还不存在。
git rev-parse --symbolic-full-name @{u}
打印适当的远程参考。另外,git log @{u}..
显示上游分支无法到达的提交,其中可以包括远程存储库中已经存在的提交(如果通过其他引用可以到达)。在合并到一个已经按下的分支中之后,这将立即发生。
checkout <somebranch>
和merge <otherbranch>
。此时,我做了,log @{u}..
并看到了列出的所有更改。
不是一个完整的答案,但是git fetch会拉出远程仓库并且不做合并。然后,您可以
git diff master来源/ master
git diff origin/master master
使用“ git log origin..HEAD”
使用“ git fetch”,然后使用“ git log HEAD..origin”。您可以使用列出的提交ID挑选单个提交。
当然,以上假设“ origin”是远程跟踪分支的名称(如果您使用具有默认选项的clone,则为该名称)。
当“ git log”和@ {u}回答最初给我“未知修订”错误时,我尝试了Chris / romkyns的建议git push --dry-run
。
您将得到诸如“ 5905..4878 master-> master”的输出。5905是遥控器具有的最新提交,并且通过(包括)4878提交的最新提交将应用于遥控器。
然后,您可以将5905..4878用作其他几个git命令的参数,以获取更多详细信息:
git diff 5905..4878 # Gives full code changes in diff style
git log --online 5905..4878 # Displays each commit's comment
进行git fetch时,所有内容(包括分支,标签(引用))都临时存储在.git / FETCH_HEAD中,可以使用以下命令查看其内容:git log FETCH_HEAD如果不对git fetch使用后缀-a,则默认情况下,则FETCH_HEAD的内容将被新内容覆盖。从这些内容中,您可以查看并决定要将它们合并到哪个分支,或者如果您只希望从fetch带来的提交中进行少量提交,则可以简单地进行选择。
hg incoming
和hg outgoing
怎么做。我找到的最接近的Git等效项是该--dry-run
选项。正义git pull --dry-run
,您将看到所有需要发生的事情的列表。