git log origin/master
git log origin/master..
Run Code Online (Sandbox Code Playgroud)
与上面的确切区别是什么?我试图理解..
符号的确切含义.我认为这是一个范围,但在这种情况下,它做了一些不同的事情.
ara*_*nid 49
使用git log
(和所有其他Git命令采用类似的参数集),它是如何查找一系列修订的规范,是的.请记住,在Git的一般世界中,这意味着修订图的一些子图 - 对大多数人来说,它通常意味着列表中的一系列修订.(如果你做任何分支都没有做太多,那么它也简化为Git中的那个).
修订规范包含一组正引用(起始点)和否定引用(停止点)和其他过滤器(限制修订数,grep提交文本等).Git从正面引用开始并返回修订历史记录,当它遇到可从负引用访问的修订时停止(不一定只是当它到达其中一个否定引用本身时).
可能相当令人困惑的是,有各种简化的符号已经发展,旨在使这一切更容易使用,但不知何故也设法混淆 - 我不得不花费一段时间来弄清楚什么是"掌握......"," maint..master"等等意味着何时使用哪个.
当你只说"origin/master"时,那意味着"origin/master"是一个正面的引用而且没有负面的引用.所以Git从origin/master开始,然后回顾所有可用的修订版本 - 你可以获得origin/master的完整历史记录.
"origin/master .."是"origin/master..HEAD"的简写,看起来有点像"从起源/主人到HEAD".这有效.它可以改写为"HEAD ^ origin/master"或"HEAD - not origin/master".在这种情况下,HEAD是正参考,"origin/master"是负参考.所以Git从HEAD开始,然后走回图表,直到它遇到可以从origin/master访问的修订版.事实上,它很可能会遇到起源/主人本身.请注意,所有引用都是包含的 - 正输出本身是输出而负引用不是(除非你给--boundary,然后它们被标记).这意味着如果HEAD和origin/master是相同的版本,"origin/master..HEAD"则不输出任何内容.
因此,如果您在上游版本之上进行了几次本地提交,则会遇到以下情况:
steve@monolith:~/src/git <master>$ git log --pretty=oneline --abbrev-commit --decorate -n 4
ea3107d (refs/heads/master) Add another dummy comment
869c260 Add dummy comment
6345d7a (refs/remotes/origin/master, refs/remotes/origin/HEAD) Merge branch 'maint'
be427d7 allow -t abbreviation for --track in git branch
Run Code Online (Sandbox Code Playgroud)
现在"git log origin/master .."意味着git将从HEAD(ea3107d)开始,它无法从origin/master访问,因此它会打印出来.然后它回到HEAD的父母(869c260),但仍然没有,所以打印出来.然后下一个父亲是6345d7a,它是 origin/master,所以它停止了.
请注意,"git log ..origin/master"反之亦然 - 尝试从origin/master返回HEAD.在这种情况下,它不会打印任何东西.但是,如果我检查出"origin/maint",它会打印origin/master上没有原点/ maint的修订:所以一般来说,试着将"A..B"想象为"B中的修订版"在A"中,记住省略A或B意味着"HEAD".
只是因为额外的超级混乱,还有一个符号"A ... B".所以记得要计算点数!在A和B处于一系列修订的情况下,没有真正的区别.但是"A ... B"的含义是A或B中的修订,它们不属于A和B的任何合并基础.因此,如果A和B位于不同的分支上,则显示所有提交的任何提交因为他们分道扬..
修订范围的"长形式"("B - 不是A")允许您指定"不在任何远程跟踪分支上的本地分支上的所有修订"之类的内容(" - 分支 - 不 - 遥控器").这个参数列表由许多Git命令解析("git rev-list"是核心命令),包括gitk.因此,您可以执行"gitk --branches --not --remotes"以图形方式查看本地更改.
最后,对于超级奖金混淆,像"git diff"这样的命令接受相同类型的简写语法,但它并不意味着(完全)同样的事情.git diff
实际上需要两个修改并比较它们,这与范围不同 - 记住Git中的修订范围是一个子图,而不仅仅是一个列表."git diff A..B"相当于"git diff A B"."git diff A ... B"表示"显示B中的变化,因为它与A分开".混乱?只是一点:例如,"git log A ... B"和"git log B ... A"意思相同,但"git diff A ... B"和"git diff B ... A " 别.
Fel*_*peC 22
git log origin/master
Run Code Online (Sandbox Code Playgroud)
就像(假命令):
git log INITIAL..origin/master
Run Code Online (Sandbox Code Playgroud)
而:
git log origin/master..
Run Code Online (Sandbox Code Playgroud)
方法是:
git log origin/master..HEAD
Run Code Online (Sandbox Code Playgroud)
我认为这是一个范围。“..”命令将显示源/主最后一次提交与您正在处理的分支上的最后一次提交之间的提交。
您也可以通过将它放在 .. 之后来指定要比较的分支,因此它会变成
git log origin/master..<branch_name>
Run Code Online (Sandbox Code Playgroud)
您还可以使用提交标识符来过滤输出,例如:
git log 663f4c..fec6b
Run Code Online (Sandbox Code Playgroud)
尝试git help log
查看其他选项:-)
归档时间: |
|
查看次数: |
26900 次 |
最近记录: |