Ian*_*las 34 git diff compare status gitk
我对Git有点新鲜,而我正在努力做的事似乎应该是可能的.基本上我一直在克隆一个回购,并做了很多本地提交.有没有办法看到我所有更改和原始回购版本的"总和"差异?我认为这是可能的,因为当我这样做时,Git基本上会这样做push.
这是我正在尝试做的一个例子:在gitk中我会看到类似这样的东西:
* - [mybranch]在answers.txt(本地提交)结尾添加'42'
* - 添加'Hello World'结束of my.txt(本地提交)
* - 在my.txt(本地提交)的开头添加'C#/.NET'
* - <[RemoteRepo]>(我克隆的原始仓库)
它是如何,我可以查看我的所有变化总和的差异my.txt和answers.txt比较,我从签出的原始版本时RemoteRepo?
man*_*lds 50
有三种方式(另外两种方式来自其他答案)
1) git diff origin/master master
2) git diff origin/master..master
3) git diff origin/master...master
Run Code Online (Sandbox Code Playgroud)
第一个和第二个相同,并显示主和远程主机的提示之间的变化.
第三个显示自上次分支推送以来主服务器上发生的更改,我认为这是您正在寻找的最合适的服务器
seh*_*ehe 16
最准备好的答案是
git show-branch
Run Code Online (Sandbox Code Playgroud)
你可以做些什么来进行更多的控制是使用git log附件git rev-list:
git log --left-right --graph --cherry-pick \
--oneline branchname...remote/branchname
Run Code Online (Sandbox Code Playgroud)
这是我首选的方法,会产生类似的结果
> | fff6bda remote fix
< | c8903ee local fix
< | 724373c Merge branch 'bla' into bla
|\ \
| < | 2faf547 details
| < | abbdc47 ....
|/ /
< | befc181 some tagged commit
Run Code Online (Sandbox Code Playgroud)
包括--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
Run Code Online (Sandbox Code Playgroud)
git config alias.lr log --long-option1 --long-option2'方便使用git config color.ui auto'立即缓解眼睛如果你想要所有本地头(在所有本地分支上)与所有远程提交(在同上分支上):
git log --decorate --pretty=oneline --all --not --glob=refs/remotes --no-walk
Run Code Online (Sandbox Code Playgroud)
不要走路,以获得所有个别修订.在这种情况下,我更喜欢使用前面显示的开关(--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'
Run Code Online (Sandbox Code Playgroud)
以及许多其他人.这应该为您提供充分的杠杆作用,以几乎零努力获得您想要的信息
什么存在于存储器中,但不存在于遥控器上(注意,由于存储在reflog中,并且reflog(即使对于远程分支)总是反映本地历史[1]),因此无法在远程分支上引用存储.
git log $(git rev-list -g stash) --not --glob=refs/remotes
Run Code Online (Sandbox Code Playgroud)
笔记
这将包括任何掉落的藏匿处,但不包括当前的藏匿处
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]另见我之前关于如何在回购之间转移藏匿的答案:
jpa*_*kal 10
最简单且最容易记住的命令(通常)执行您想要的操作是:
git diff origin
Run Code Online (Sandbox Code Playgroud)
这显示了您最初拉动的内容(原点)与您正在处理的当前分支之间的差异,默认为master.
可以查看差异git diff A B,它将比较A到B中的代码:
git diff origin/master master
Run Code Online (Sandbox Code Playgroud)
origin/master是您上次从中获取(或克隆)的远程主分支master的状态,是代码的本地状态 - 除非您在本地工作时切换分支.