How to diff a commit with its parent?

Aside from writing an alias or script, is there a shorter command for getting the diff for a particular commit?

git diff 15dc8^..15dc8

If you only give the single commit id git diff 15dc8 , it diffs that commit against HEAD.


Use git show $COMMIT . It'll show you the log message for the commit, and the diff of that particular commit.


Use:

git diff 15dc8^!

as described in the following fragment of git-rev-parse(1) manpage (or in modern git gitrevisions(7) manpage):

Two other shorthands for naming a set that is formed by a commit and its parent commits exist. The r1^@ notation means all parents of r1. r1^! includes commit r1 but excludes all of its parents.

This means that you can use 15dc8^! as a shorthand for 15dc8^..15dc8 anywhere in git where revisions are needed. For diff command the git diff 15dc8^..15dc8 is understood as git diff 15dc8^ 15dc8 , which means the difference between parent of commit ( 15dc8^ ) and commit ( 15dc8 ).

Note : the description in git-rev-parse(1) manpage talks about revision ranges , where it needs to work also for merge commits, with more than one parent. Then r1^! is " r1 --not r1^@ " ie " r1 ^r1^1 ^r1^2 ... "


Also, you can use git show COMMIT to get commit description and diff for a commit. If you want only diff, you can use git diff-tree -p COMMIT


If you know how far back, you can try something like:

# Current branch vs. parent
git diff HEAD^ HEAD

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

Prior commits work something like this:

# Parent of HEAD
git show HEAD^1

# Grandparent
git show HEAD^2

There are a lot of ways you can specify commits:

# Great grandparent
git show HEAD~3

See this page for details.

链接地址: http://www.djcxy.com/p/50890.html

上一篇: 使用.gitconfig配置diff工具?

下一篇: 如何区分父项的提交?