我对Git有点新鲜,我想做的事情似乎应该是可能的。基本上我一直在克隆一个回购,并做了很多本地提交。有没有办法看到我所有更改和原始回购版本的“总和”差异?我认为这是可能的,因为当我做push
时,Git基本上会这样做。
以下是我正在尝试做的一个例子:在gitk中我会看到这样的事情:
* - [mybranch]在answers.txt(本地提交)结束时添加了'42'
* - 在my.txt(本地提交)结束时添加了'Hello World'
* - 在my.txt(本地提交)的开头添加了“C#/。NET”
* - < [RemoteRepo]> (我克隆的原始回购)
与我从my.txt
签出的原始版本相比,我如何查看answers.txt
和RemoteRepo
所有更改总和的差异?
答案 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
git config alias.lr log --long-option1 --long-option2
”方便使用 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 log
和rev-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
注释
这将包括任何丢弃的藏匿处,但不包括当前的藏匿
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