使用Git如何find本地和远程之间的变化
这里有两个不同的问题,但我认为他们是相关的。
- 
在使用Git时,如何查找我在本地提交的更改,但尚未推送到远程分支? 我正在寻找类似于 hg outgoing的Mercurial命令。
- 
在使用Git时,如何查找远程分支在执行pull操作之前所做的更改? 我正在寻找类似于Mercurial命令的 hg incoming。
对于第二个:有没有办法看看有什么可用的,然后挑选我想拉的变化?
  Git不能通过networking发送这样的信息,比如Hg可以。 但是你可以运行git fetch (它比hg fetch更像hg pull )从远程服务器获取新的提交。 
 所以,如果你有一个名为master的分支和一个名为origin的远程,在运行git fetch ,你也应该有一个叫做origin/master的分支。 然后你可以通过执行git log master..origin/master来获得master需要成为origin/master的超集的所有提交的git log master..origin/master 。 颠倒这两个相反。 
 我的一个朋友David Dollar创build了几个git shell脚本来模拟hg incoming/outgoing 。 你可以在http://github.com/ddollar/git-utilsfind它们。; 
 从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 diff主起源/主
- 
使用“git log origin..HEAD” 
- 
使用“git fetch”后跟“git log HEAD..origin”。 您可以使用列出的提交id挑选单个提交。 
当然,上面假定“origin”是远程追踪分支的名称(如果你使用了默认选项的克隆)。
还有,比较所有分支机构:
 git log --branches --not --remotes=origin 
这就是git log man page所说的:
显示任何本地分支中的所有提交,但不包含任何源的远程跟踪分支(您拥有该源的任何分支)。
 以上是outgoing 。 对于incoming ,只需交换: 
 git log --remotes=origin --not --branches 
我会做
 $ git fetch --dry-run 
 为hg incoming和 
 $ git push --dry-run 
 为hg outgoing 。 
  git-out是一个相当准确地模拟hg outgoing的脚本。 它parsing“push -n”输出,所以如果你需要指定更多的参数来推送,它会产生精确的输出。 
git传入
 $ git fetch && git log ..origin/master --stat OR $ git fetch && git log ..origin/master --patch 
git传出
 $ git fetch && git log origin/master.. --stat OR $ git fetch && git log origin/master.. --patch 
 当“git log”和@ {u}回答最初给了我“未知版本”的错误时,我尝试了git push --dry-run Chris / romkynsbuild议。 
你会得到一个输出,如“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 
当你做混帐抓取时,包括分支,标签(ref)在内的所有内容都被临时存储在.git / FETCH_HEAD中,其内容可以通过命令查看:git log FETCH_HEAD如果你没有使用后缀-a和git fetch,那么默认情况下,FETCH_HEAD的内容将被新的内容覆盖。 从这些内容中,您可以查看并决定要将哪个分支合并到一起,或者如果您只需从提取带来的提交中进行一些提交,就可以进行简单的select。