Git:比较所有本地提交到远程Repo版本

时间:2011-04-20 18:10:51

标签: git diff compare status gitk

我对Git有点新鲜,我想做的事情似乎应该是可能的。基本上我一直在克隆一个回购,并做了很多本地提交。有没有办法看到我所有更改和原始回购版本的“总和”差异?我认为这是可能的,因为当我做push时,Git基本上会这样做。

以下是我正在尝试做的一个例子:在gitk中我会看到这样的事情:
* - [mybranch]在answers.txt(本地提交)结束时添加了'42' * - 在my.txt(本地提交)结束时添加了'Hello World' * - 在my.txt(本地提交)的开头添加了“C#/。NET” * - < [RemoteRepo]> (我克隆的原始回购)

与我从my.txt签出的原始版本相比,我如何查看answers.txtRemoteRepo所有更改总和的差异?

6 个答案:

答案 0 :(得分:50)

有三种方法(另外两种来自此处给出的其他答案)

1) git diff origin/master master
2) git diff origin/master..master
3) git diff origin/master...master

第一个和第二个相同,并显示主和远程主控的提示之间的变化。

第三个显示自上次分支推送以来主服务器上发生的更改,我认为这是您正在寻找的最合适的

答案 1 :(得分:16)

最准确的答案是

 git show-branch

您可以采取更多控制措施:git log附件git rev-list

 git log --left-right --graph --cherry-pick \
      --oneline branchname...remote/branchname

这是我首选的方法,会产生类似

的内容
> | fff6bda remote fix
< | c8903ee local fix
< |   724373c Merge branch 'bla' into bla
|\ \  
| < | 2faf547 details
| < | abbdc47 ....
|/ /  
< | befc181 some tagged commit

包括--decorate,你会得到一些接近gitk,git-gui和gitweb的东西:

> | fff6bda remote fix
< | c8903ee local fix
< |   724373c (tag_4) Merge branch 'bla' into bla
|\ \  
| < | 2faf547 details
| < | abbdc47 ....
|/ /  
< | befc181 (tag_3) some tagged commit

专业提示1:使用“git config alias.lr log --long-option1 --long-option2”方便使用

专业提示2:使用“git config color.ui auto”立即解除眼睛

如果您想要所有本地磁头(所有本地分支上的 )与所有远程提交( on ditto branches ):

git log --decorate --pretty=oneline --all --not --glob=refs/remotes --no-walk

不要走路,以获得所有个别修订。在这种情况下,我更喜欢使用前面显示的开关(--graph --left-right)

用于合并

如果您想清楚地看到合并,请包含--boundary

各种高级查询:

过滤结果

Git logrev-list支持一大堆狡猾的过滤功能,请参阅手册页

--after '2001-01-01'
--until 'last week'
--author 'martin'
-E -i  --grep='fixes #[0123456789]+'
-S 'new_debug_function'

以及许多其他人。这应该为您提供充分的杠杆作用,以便几乎不费力地获得您想要的信息

什么东西藏在本地?

什么存在于存储器中,但不存在于遥控器上(请注意,由于存储在reflog中,并且reflog(即使对于远程分支)始终反映本地历史记录[1]),因此无法在远程分支上引用stashes: / p>

git log $(git rev-list -g stash) --not --glob=refs/remotes 

所有(其他)无法访问的提交......

注释

  • 在我的工作流程中,这些constitue重新设置/修改了提交并仅删除了藏匿
  • 还会生成这些内容,这需要一些时间,具体取决于您的历史记录图表的大小
  • 这将包括任何丢弃的藏匿处,但不包括当前的藏匿

    git log $(git fsck --unreachable --full --lost-found |               grep'commit'|切-d'' - f3)\     --no-walk --not --glob = refs / remotes --oneline --decorate

脚本

出于编写脚本的目的,将git log替换为git rev-list,您将获得哈希(以及更多脚本专业的健壮性)

[1]另见我之前关于如何在回购之间转移藏匿处的答案:

答案 2 :(得分:8)

最简单且最容易记住的命令(通常)可以执行您想要的操作:

git diff origin

这显示了您最初提取的内容(原点)与您正在处理的当前分支之间的差异,默认为master

答案 3 :(得分:5)

可以使用git diff A B查看差异,它会比较A到B中的代码:

git diff origin/master master

origin/master是您上次从中获取(或克隆)的远程主分支的状态,master是代码的本地状态 - 除非您在本地工作时切换分支。

答案 4 :(得分:2)

一切  git diff HEAD origin /“nameofyourbranch”

用于特定文件  git diff HEAD:“filename”origin /“nameofbranch”:“filename”

答案 5 :(得分:2)

git diff origin/master..master