Question Comment différer un commit avec son parent?


Mis à part l'écriture d'un alias ou d'un script, y a-t-il une commande plus courte pour obtenir le diff pour un commit particulier?

git diff 15dc8^..15dc8

Si vous ne donnez que l'identifiant d'engagement unique git diff 15dc8, il diffs que commettre contre HEAD.


417
2018-01-12 18:03


origine


Réponses:


Utilisation git show $COMMIT. Il vous montrera le message de journal pour la validation et le diff de cette validation particulière.


586
2018-01-12 18:06



Utilisation:

git diff 15dc8^!

comme décrit dans le fragment suivant de git-rev-parse (1) page de manuel (ou dans git moderne Gitrevisions (7) page de manuel):

Deux autres raccourcis pour nommer un ensemble formé par un commit et son   parent commits existe. La notation r1 ^ @ signifie tous les parents de r1. r1 ^!   inclut commit r1 mais exclut tous ses parents.

Cela signifie que vous pouvez utiliser 15dc8^! comme un raccourci pour 15dc8^..15dc8 n'importe où dans git où les révisions sont nécessaires. Pour diff commander le git diff 15dc8^..15dc8 est entendu comme git diff 15dc8^ 15dc8, ce qui signifie la différence entre parent de commit (15dc8^) et commettre (15dc8).

Remarque: la description en git-rev-parse(1) Manpage parle de révision gammes, où il doit également travailler pour les commits de fusion, avec plusieurs parents. alors r1^! est "r1 --not r1^@" c'est à dire. "r1 ^r1^1 ^r1^2 ..."


En outre, vous pouvez utiliser git show COMMIT pour obtenir la description de la validation et la diff pour un commit. Si vous voulez seulement diff, vous pouvez utiliser git diff-tree -p COMMIT


401
2018-01-12 19:34



Si vous savez à quelle distance vous arrivez, vous pouvez essayer quelque chose comme:

# Current branch vs. parent
git diff HEAD^ HEAD

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

Les commits précédents travaillent quelque chose comme ceci:

# Parent of HEAD
git show HEAD^1

# Grandparent
git show HEAD^2

Il existe de nombreuses façons de spécifier des validations:

# Great grandparent
git show HEAD~3

Voir cette page pour plus de détails.


54
2018-03-14 09:16



Comme le souligne @mipadi, vous pouvez utiliser git show $COMMIT, mais cela montre aussi certains en-têtes et le message de validation. Si vous voulez une diff droite, utilisez git show --pretty=format:%b $COMMIT.

Ceci est, évidemment pas une main très courte, donc je garde cet alias dans mon .gitconfig

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

Cela me permet d'utiliser git sd $COMMITà montrer diff.


10
2017-08-20 02:05



Beaucoup des exemples mentionnés (par ex. git diff 15dc8^!, ou git diff 15dc8^..15dc8) ne fonctionne pas si vous utilisez zsh et avez extendedglob jeu d'options. Vous pouvez le réparer par l'une des trois méthodes suivantes:

  1. unsetopt extendedglob (et / ou le supprimer de .zshrc)

  2. setopt NO_NOMATCH (et / ou le définir dans .zshrc)

  3. échapper au caret et frapper à chaque fois avec un backslash, par exemple git diff 15dc8\^\!


5
2017-12-06 12:08



La solution de Paul ci-dessus a fait ce que j'espérais.

$ git diff HEAD^1

Aussi, il est utile d'ajouter des alias tels que les hobs mentionnés, si vous mettez ce qui suit dans la section [alias] de votre fichier ~ / .gitconfig, vous pouvez utiliser short-hand pour voir diff entre head et previous.

[alias]
    diff-last = diff HEAD^1

Puis courir $ git diff-dernier vous obtiendrez votre résultat. Notez que cela sera également comprendre tout changement que vous n'avez pas encore engagé ainsi que le diff entre les commits. Si tu veux ignorer les changements que vous n'avez pas encore effectués, alors vous pouvez utiliser diff pour comparer directement le HEAD avec son parent:

$ git diff HEAD^1 HEAD

2
2017-11-26 15:40



git diff 15dc8 15dce~1

~ 1 signifie 'parent', ~ 2 'grand-parent, etc.


1
2018-05-02 06:28



Utilise des alias, donc ne répond pas exactement à votre question mais je trouve cela utile pour faire ce que vous voulez ...

alias gitdiff-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"

alias gitlog-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"

0