42

我对 Git 有点陌生,我正在尝试做的事情似乎应该是可能的。基本上我一直在克隆一个 repo 并且做了很多本地提交。有没有办法查看我所有更改的“总和”与原始回购版本的差异?我认为这是可能的,因为当我执行push.

这是我正在尝试做的一个示例:在 gitk 中,我将看到如下内容:
* - [mybranch] 在 answers.txt 的末尾添加了 '42'(本地提交)
* - 在结束时添加了 'Hello World' my.txt 的(本地提交)
* - 在 my.txt 的开头添加了“C#/.NET”(本地提交)
* - <[RemoteRepo]>(我克隆的原始仓库)

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

4

6 回答 6

63

有三种方法(这里给出的其他答案中的另外两种)

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

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

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

于 2011-04-20T18:53:19.967 回答
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' 立即缓解眼部问题

如果您想要所有本地负责人(在所有本地分支上)与所有远程提交(在同上分支上):

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

放弃禁止步行以获取所有单独的修订。在这种情况下,我更喜欢使用前面显示的开关(--graph --left-right)

合并

如果你想清楚地看到合并,包括 --boundary

各种高级查询:

过滤结果

Gitlogrev-list支持一系列狡猾的过滤功能,请参阅手册页

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

还有很多很多其他的。这应该为您提供足够的杠杆作用,几乎可以零努力地获得您想要的信息

本地藏了什么?

什么驻留在存储中,但不在远程(请注意,无法引用远程分支上的存储,因为存储驻留在 reflogs 中,并且 reflogs(即使对于远程分支)总是反映本地历史 [1]):

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

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

笔记

  • 在我的工作流程中,这些构成重新设置/修改的提交和仅丢弃的存储
  • 根据历史图表的大小,生成这些也需要一些时间
  • 这将包括任何丢弃的存储,但不包括当前的存储

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

脚本

出于脚本目的,替换使用git logwith git rev-list,您将只获得哈希值(以及更多脚本-prrof 健壮性)

[1] 另请参阅我之前关于如何在存储库之间转移存储的答案:

于 2011-04-20T18:32:11.390 回答
13

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

git diff origin

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

于 2011-08-22T02:08:39.713 回答
5

可以用 来查看差异git diff A B,它将比较 A 和 B 中的代码:

git diff origin/master master

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

于 2011-04-20T18:43:36.580 回答
3

对于一切 git diff HEAD origin/"nameofyourbranch"

对于特定文件 git diff HEAD:"filename" origin/"nameofbranch":"filename"

于 2011-04-20T18:41:58.590 回答
2
git diff origin/master..master
于 2011-04-20T18:44:29.337 回答