当前位置:  开发笔记 > IOS > 正文

如何与其父级进行提交?

如何解决《如何与其父级进行提交?》经验,为你挑选了5个好方法。

除了编写别名或脚本之外,是否有更短的命令来获取特定提交的差异?

git diff 15dc8^..15dc8

如果您只提供单个提交ID git diff 15dc8,则会针对HEAD区分该提交.



1> mipadi..:

使用git show $COMMIT.它将向您显示提交的日志消息以及该特定提交的差异.


太糟糕了,它不能使用difftool :(
我更喜欢JakubNarebski的答案,因为那里给出的提交表达式将在许多情况下起作用:http://stackoverflow.com/a/449128/992887
@PTWithy:问题是,"是否有一个更短的命令来获取特定提交的差异?",这个问题的答案.

2> Jakub Narębs..:

使用:

git diff 15dc8^!

如git-rev-parse(1)联机帮助页(或现代git gitrevisions(7)联机帮助页)的以下片段中所述:

另外两个简写用于命名由提交及其父提交形成的集合.r1 ^ @表示法表示r1的所有父项.R1 ^!包括提交r1但排除其所有父母.

这意味着你可以在git的任何地方使用15dc8^!速记作为15dc8^..15dc8需要修改的地方.对于diff命令,git diff 15dc8^..15dc8理解为git diff 15dc8^ 15dc8,这意味着commit(15dc8^)和commit(15dc8)的父级之间的差异.

注意:git-rev-parse(1)联机帮助页中的说明讨论了修订范围,它还需要用于具有多个父项的合并提交.然后r1^!是" r1 --not r1^@"即" r1 ^r1^1 ^r1^2 ..."


此外,您可以使用git show COMMIT获取提交的提交描述和差异.如果你只想要差异,你可以使用git diff-tree -p COMMIT


这应该是公认的答案,它更整洁.但是,git-rev-parse提取的最后一句话相当混乱 - 似乎意味着'从这个提交的父级到此提交的范围'.

3> Paul Vincent..:

如果你知道多远,你可以尝试这样的事情:

# Current branch vs. parent
git diff HEAD^ HEAD

# Current branch, diff between commits 2 and 3 times back
git diff HEAD~3 HEAD~2

先前的提交工作是这样的:

# Parent of HEAD
git show HEAD^1

# Grandparent
git show HEAD^2

您可以通过多种方式指定提交:

# Great grandparent
git show HEAD~3

有关详情,请参阅此页面.


HEAD ^ 2不是祖父母,如果HEAD ^ 1是爸爸,那么HEAD ^ 2是妈妈。将HEAD〜2用作爸爸的爸爸。

4> Øystein Stei..:

正如@mipadi指出的那样,您可以使用git show $COMMIT,但这也会显示一些标头和提交消息.如果你想要直的差异,请使用git show --pretty=format:%b $COMMIT.

这显然不是一个很短的手,所以我在我的.gitconfig中保留了这个别名

    [alias]
      sd = show --pretty=format:%b

这使我可以git sd $COMMIT用来显示差异.



5> Ville..:

如果您使用zsh并设置了选项git diff 15dc8^!,则许多提到的示例(例如,或git diff 15dc8^..15dc8)不起作用extendedglob.您可以通过以下三种方法之一修复它:

    unsetopt extendedglob (和/或从.zshrc中删除它)

    setopt NO_NOMATCH (和/或在.zshrc中设置)

    每次用反斜杠逃脱插入符号,例如 git diff 15dc8\^\!

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有