J'écris du code pour exécuter par programme des commandes git et apprendre git en même temps. Est-ce que je lis mal les pages man ou est ce que je veux faire n'est pas faisable?Qu'est-ce que la syntaxe "git" pour obtenir seulement le diff unifié de la façon dont un seul commit X a changé un seul fichier Y?
Ce qui suit va me dire comment changé MYFILE entre les deux commits:
git diff COMMIT1..COMMIT2 - MYFILE
Bon. Mais, disons que je veux juste demander comment COMMITX a changé le fichier, sans spécifier la validation préalable. Dans mon imagination la syntaxe serait quelque chose comme ceci:
git diff COMMITX -- MYFILE
ou ceci:
git diff COMMITX^..COMMITX -- MYFILE
Mais les commandes ci-dessus ne fonctionnent pas (pour moi). Ce qui suit fonctionne dans le sens où il me donne le diff unifié montrant comment COMMITX a changé MYFILE, mais il inclut aussi d'autres choses que je dois enlever - comme auteur, date, le checkin msg. Retirer les trucs supplémentaires est facile, mais j'ai l'impression que c'est quelque chose que je ne devrais pas avoir à faire. Est-ce que le commandement existe? Suis-je mal compris quelque chose de simple?
git show COMMITX -- MYFILE
EDIT1: Je montre ici la sortie réelle de ma fenêtre "bash git". J'ai changé le "show" en "diff", et n'a obtenu aucune sortie.
$ git show 789e9 -- dir1/file3.txt commit 789e948bce733dab9605bf8eb51584e3b9a2eba3 Author: corey Date: Sun Oct 11 21:54:14 2009 -0500 my msg diff --git a/dir1/file3.txt b/dir1/file3.txt index a351259..cf2bd35 100644 --- a/dir1/file3.txt +++ b/dir1/file3.txt @@ -4,5 +4,7 @@ c ddd e f +a new line +another new line g h [email protected] /c/temp/mygit (master) $ git diff 789e9 -- dir1/file3.txt [email protected] /c/temp/mygit (master)
Je sais que vous avez déjà accepté une réponse, mais je veux être sûr que vous le savez - c'est totalement faisable avec 'git-diff'. Voir ci-dessous! – Cascabel
"git diff COMMIT - FILE" compare la version de FILE dans COMMIT avec la version de FILE dans votre espace de travail ... ce qui n'est pas ce que vous vouliez. –
@Jerromi - voir mon commentaire à votre réponse. Ne fonctionne pas pour moi. –