799 votes

git diff commits différence

Comment faire pour que git diff ne montre que la différence entre 2 commits, c'est-à-dire exclure les autres commits entre les 2 ?

672voto

OneOfOne Points 15558

Vous pouvez simplement passer les 2 commits à git diff comme :

-> git diff 0da94be  59ff30c > my.patch
-> git apply my.patch

165voto

bdonlan Points 90068

Demander la différence /entre/ deux commits sans inclure les commits intermédiaires n'a pas beaucoup de sens. Les commits ne sont que des instantanés du contenu du référentiel ; demander la différence entre deux commits les inclut nécessairement. La question est donc de savoir ce que l'on cherche vraiment.

Comme William l'a suggéré, le cherry-picking peut vous donner le delta d'un commit unique basé sur un autre. C'est-à-dire :

$ git checkout 012345
$ git cherry-pick -n abcdef
$ git diff --cached

Elle prend le commit 'abcdef', le compare à son ancêtre immédiat et applique ensuite cette différence au-dessus de "012345". Cette nouvelle différence est alors affichée - le seul changement est que le contexte provient de '012345' plutôt que de l'ancêtre immédiat de 'abcdef'. Bien sûr, vous risquez d'obtenir des conflits, etc., et ce procédé n'est donc pas très utile dans la plupart des cas.

Si vous êtes juste intéressé par l'abcdef lui-même, vous pouvez le faire :

$ git log -u -1 abcdef

Cela compare abcdef à son ancêtre immédiat, seul, et c'est généralement ce que vous voulez.

Et bien sûr

$ git diff 012345..abcdef

vous donne toutes les différences entre ces deux commits.

Il serait utile d'avoir une meilleure idée de ce que vous essayez d'obtenir - comme je l'ai mentionné, demander la différence entre deux commits sans ce qui se trouve entre les deux n'a pas vraiment de sens.

137voto

plexoos Points 59

Pour comparer deux commandes git 12345 et abcdef en tant que correctifs, on peut utiliser la commande diff comme suit

diff <(git show 123456) <(git show abcdef)

14voto

William Pursell Points 56211

Supposons que vous voulez voir la différence entre les commits 012345 et abcdef. Ce qui suit devrait faire ce que vous voulez :

$ git checkout 012345
$ git cherry-pick -n abcdef
$ git diff --cached

0voto

user141279 Points 1

Git diff 0da94be 59ff30c | git apply

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X