当我进行 merge 提交并运行 git show #commit 时,它只显示提交日志,而不是实际更改的差异,例如
commit c0f50178901e09a1237f7b9d9173ec5d1c4936c
Merge: ed234b ded051
Author: abc
Date: Mon Nov 21 15:56:33 2016 -0800
Merge branch 'abc'
最佳答案
TL;DR:使用 git show -m c05f017或 git show --first-parent c05f017 ,或者 git diff c05f017^ c05f017 .
你的问题有一个基本错误:提交不是差异;提交是快照。这似乎是一种没有区别的区别——对于某些提交来说,确实如此。但是对于 merge 提交,它不是。
当git show (或 git log -p )将提交显示为差异,这是通过将提交的快照与其他内容进行比较来实现的。 git diff命令做同样的事情:它将一个提交与另一个提交进行比较。 (或者它可以将提交与工作树、索引的内容或其他一些组合进行比较。)
对于普通提交,比较什么是显而易见的:将这次提交的快照与前一个(即父)提交的快照进行比较。这就是git show确实(还有 git log -p):它运行一个 git diff从父提交到这次提交。
但是, merge 提交不只有一个父提交。他们有两个父级。1 这就是让他们首先“merge 提交”的原因: merge 提交的定义是至少有两个父级的提交。
1一个 merge 提交可以有三个或更多的父级。这些被称为“ Octopus merge ”。不过,他们并没有做任何特别的事情,主要是为了炫耀。 :-) 你可以在这里忽略它们。
当有两个 parent 时,应该选择哪一个 git show比较?
什么 git log -p默认情况下选择做的是根本不比较。你可以通过添加各种标志来让它显示一些东西(见下文)。
什么 git show默认情况下选择做的比较复杂。由于有两个 parent ,git show首先与“第一个父级”进行比较,2 然后与第二个父级进行比较。那么——这部分很关键——它结合两个差异 ,产生所谓的“组合差异”。
在下一节中,让我注意一个棘手但非常有用的 Git 语法。如果你有一个像 c05f017 这样的提交 ID , 您可以添加脱字符或“帽子”字符 ^之后,命名父提交。您可以选择添加另一个数字来选择哪个父级。对于常规(非 merge )提交只有一个,所以 c05f017^是 parent 。对于 merge 提交,c05f017^和 c05f017^1两者都表示第一个父级,而 c05f017^2表示第二个 parent 。
2我把它放在引号中是因为第一个父级的想法在 Git 中特别重要,我们稍后会看到。换句话说,Git 最关心哪个父级在前,而其余的只是“其余”。
组合差异
组合差异格式在 the documentation 中描述。 ,但首先描述一个关键位 here ,以使其特别晦涩:3
Note that combined diff lists only files which were modified from all parents.
mainline.txt和 common.txt都被改变了。进一步假设比较 M^2 和 M 表示文件 sidebranch.txt和 common.txt都被改变了。 merge 后的差异将仅显示 common.txt , 跳过两者 mainline.txt和 sidebranch.txt因为这两个文件仅从一个父文件(每个文件)修改。 (即使这样,Git 也可能只显示 common.txt 的一些差异。)-m选项——m 在这里可能代表 merge ——告诉 Git 实际上“拆分” merge 。也就是说,与其尝试将针对每个父级的差异组合成一个大的组合差异,只需显示针对每个父级的差异,一次一个差异。git diff只是与两个 parent 之一(或见下文)不同。develop然后你 merge topic :$ git checkout develop
$ git merge topic
Git 将在您当前的分支 develop 上进行一个新的提交——一个 merge 提交,有两个父节点。 . merge 提交的第一个父项将是 develop 提示的提交。就在刚才。第二个父项将是(仍然)是 topic 提示的提交。 .git show允许您运行 git show --first-parent .这“拆分”了提交,然后 git show仅与第一个父级不同。 (这与 git show -m 有点不同,后者将提交拆分两次:第一个拆分与第一个父项进行比较,第二个拆分与第二个父项进行比较。)git log -p --first-parent在这里,--first-parent flag 有一个更重要的作用:日志操作根本不查看任何侧分支的提交,只查看主(第一父)行上的提交。请注意,如果您的 Git 早于 2.31,您仍然需要 -m标志也是如此(当使用 git log 时,也就是说; git show 默认为 --cc ,因此不需要 -m ,所有这些都在 Git 2.31 中清除了)。
关于 merge 提交的 git 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40986518/
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi
如果我在模型中设置验证消息validates:name,:presence=>{:message=>'Thenamecantbeblank.'}我如何让该消息显示在闪光警报中,这是我迄今为止尝试过的方法defcreate@message=Message.new(params[:message])if@message.valid?ContactMailer.send_mail(@message).deliverredirect_to(root_path,:notice=>"Thanksforyourmessage,Iwillbeintouchsoon")elseflash[:error]
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g
我刚刚按照thebootsygempage上的安装说明进行操作在我保存并查看帖子内容之前,一切看起来都不错。这是输出在View中的样子:HeaderSubhead:似乎没有呈现任何html格式,因为它被引号或类似的东西转义了-其他人有这个问题吗?我没有在github页面或SO上看到任何问题来指出我正确的方向。除了遵循gem安装说明之外,我还没有做任何事情,但也许我错过了什么或者只是犯了一个愚蠢的错误。如果你还有什么想知道的,请尽管问。干杯 最佳答案 你需要有这样的东西,转义html: 关