584 votes

Comment ajouter un fichier au dernier commit dans git ?

Parfois, après avoir effectué une livraison, je découvre que j'ai oublié un fichier qui devrait être inclus dans la livraison mais qui ne l'est pas. Ce que je faisais souvent était de commiter à nouveau.

git add the_left_out_file
git commit "include the file which should be added in the last commit"

Je pense que ce n'est pas une bonne idée de le faire, ce que je veux faire c'est juste inclure le fichier sans ajouter un commit. Quelque chose comme ça,

git add the_left_out_file
git add_staged_files_to_previous_commit

Est-ce possible ?

0 votes

Également, une autre explication de la même chose : stackoverflow.com/questions/26050327/

0 votes

J'ai trouvé cet article génial : medium.com/@igor_marques/

1132voto

Konrad 'Zegis' Points 3775

Oui, il y a une commande git commit --amend qui est utilisé pour "corriger" le dernier commit.

Dans votre cas, cela s'appellerait comme :

git add the_left_out_file
git commit --amend --no-edit

Le drapeau --no-edit permet d'apporter des modifications au commit sans changer le message de commit.

EDIT : Avertissement Vous ne devriez jamais modifier les commits publics, que vous avez déjà poussé dans le dépôt public, parce que ce que amender fait est en fait de supprimer de l'historique le dernier commit et de créer un nouveau commit avec les changements combinés de ce commit et les nouveaux ajoutés lors de l'amendement.

4 votes

J'ai vu l'EDIT dans la réponse de @konrad-zeguis. après faire le commit... Comment annuler 'git commit --amend --no-edit' ?

0 votes

Essayez 'git reset HEAD@{1}' qui vous ramènera un commit en arrière. Vous pouvez utiliser 'git reflog' pour obtenir une liste complète des commits, et l'utiliser pour réinitialiser à 'HEAD@{n}' où n est le commit auquel vous voulez revenir.

36 votes

Pour rappel, à la fin, vous devez utiliser : git push --force car de cette façon, vous réécrivez l'arbre des commits.

50voto

Si vous n'avez pas poussé la mise à jour à distance, la solution simple est de supprimer le dernier commit local en utilisant la commande suivante : git reset HEAD^ . Puis ajouter tous les fichiers et commiter à nouveau.

3 votes

Super tour, Muhammed ! Peux-tu ajouter une brève explication sur HEAD^ à votre réponse ?

11 votes

HEAD^ est une référence au commit précédant le dernier commit de la branche courante. HEAD est une référence au dernier commit de la branche courante.

11 votes

^ représente -1, et HEAD représente le pointeur de la position actuelle dans git. Ainsi, HEAD^ représente 1 commit avant le dernier commit.

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