131 votes

Comment ajouter un fichier à un commit précédent ?

Au cours de la dernière heure, j'ai modifié les fichiers

A
ATest
B
BTest

Afin de m'assurer que mes messages de validation correspondent aux changements réels, j'ai validé la commande suivante A avec une description. Malheureusement, je n'ai pas inclus ATest dans cet engagement.

Pendant ce temps, les personnes qui ne se sont pas encore engagées sont B y BTest .

Quelle est la meilleure façon de procéder à ce stade ? J'aimerais soit :

  1. Revenir sur un commit précédent sans affecter mes fichiers actuellement non commités ?
  2. Ajouter un autre fichier sous la même description au commit précédent ?

224voto

William Pursell Points 56211

Pour ajouter un nouveau fichier à la livraison précédente :

$ git add new-file
$ git commit --amend

Vous pouvez utiliser git commit --amend --no-edit si vous ne voulez pas changer le message de livraison.

76voto

amalloy Points 29125

Voici un organigramme amusant 1 qui est aussi étonnamment pratique : il donne la recommandation correcte à la fois pour la question originale et pour la question modifiée "Et si ce n'était pas le dernier commit ?".

Git-pretty flowchart

1 Tiré de http://justinhileman.info/article/git-pretty/

32voto

Ajouter un fichier à un commit précédent

Si vous avez déjà poussé la branche sur laquelle vous travaillez, veuillez consulter l'onglet pages de manuel d'abord. En particulier, veuillez noter :

Rebaser (ou toute autre forme de réécriture) une branche sur laquelle d'autres ont basé leur travail est une mauvaise idée : toute personne en aval de celle-ci est obligée de corriger manuellement son historique.

Cependant, si vous n'avez pas poussé votre branche, préparez-vous à entrer dans la section zone de danger .

Trouver le hash du commit

Tout d'abord, vous devez connaître le hash du commit que vous voulez ajouter. Ceci est indiqué par git log . Vous voulez en fait spécifier le commit avant à celui que vous voulez ajouter. (Vous pouvez le considérer comme l'index de départ de la tranche de commits que vous voulez modifier). Vous pouvez vous assurer que vous avez le bon commit en exécutant git log -1 HEAD~n . Où 'n' est un nombre entier que vous incrémentez jusqu'à ce que vous ayez le bon engagement. Ou vous pouvez compter, pas vraiment.

Mais, si vous comptez, confirmez au moins que vous avez le bon commit avec git log -1 HEAD~5 ou quel que soit votre compte. Vous ne devriez PAS voir le commit que vous voulez ajouter.

DANGER , heh

Maintenant, vous êtes prêt à exécuter git rebase -i HEAD~5 ou utiliser un hash de validation à la place git rebase -i hash^ . Cela fera apparaître votre éditeur de texte préféré et un fichier à modifier. Ce fichier est la liste des choses à faire pour la commande rebase. Les commentaires dans le fichier vous indiquent les options dont vous disposez. Trouvez simplement la ligne avec le commit que vous voulez ajouter, et sur cette ligne changez 'pick' en 'edit'. Maintenant, enregistrez et fermez le fichier.

Le rebasement s'arrêtera une fois qu'il aura atteint le commit que vous lui avez demandé de modifier. Exécutez un git status pour voir les informations supplémentaires qu'il fournit. Mettez en scène vos fichiers à ajouter au commit avec git add . ou quel que soit le nom du fichier.

Ensuite, faites git commit --amend o git commit --amend --no-edit (si vous ne voulez pas modifier le message de validation). Cela modifiera le commit que vous avez choisi d'éditer.

Enfin, exécutez git rebase --continue .

En cas de doute, sous Linux, vous pouvez en savoir plus en lisant la documentation produite par man git-rebase o git --help rebase .

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