Comment modifier un commit sans changer le message de commit (réutiliser le précédent)?

657

Existe-t-il un moyen de modifier un commit sans vi(ou votre $EDITOR) pop-up avec l'option de modifier votre message de commit, mais simplement en réutilisant le message précédent?

Sridhar Sarnobat
la source
6
Je dévaloriserais ma propre question après avoir appris à la dure les maux de l'amendement.
Sridhar Sarnobat
28
Tant que vous respectez certaines règles (comme ne pas modifier quelque chose qui est déjà poussé), il n'y a aucune raison pour que la modification soit une mauvaise chose.
paullb
3
Les validations de modification ne doivent pas être utilisées pour la validation intermittente de travaux lors d'un seul changement logique. Pour cela, vous devez valider localement correctement puis écraser l'historique des validations une fois terminé (@ Sridhar-Sarnobat)
DBCerigo
3
Je suis entièrement d'accord avec @DBCerigo. La seule situation que je trouve utile de modifier est quand j'ai oublié de mettre en scène un fichier dans un commit précédent (par exemple parce qu'il est nouveau et qu'il n'est donc pas automatiquement mis en scène lors de l'exécution de git commit -a) et que je veux le valider rétroactivement.
Sridhar Sarnobat
1
Une autre modification est utile, même si vous reconnaissez les dangers de la modification de l'historique, si vous n'êtes pas satisfait de votre message de validation le plus récent et souhaitez le reformuler sans avoir à rebaser.
Sridhar Sarnobat

Réponses:

1011

Depuis la version git 1.7.9, vous pouvez également utiliser git commit --amend --no-editpour obtenir votre résultat.

Notez que cela n'inclura pas les métadonnées de l'autre commit telles que l'horodatage qui peuvent ou non être importants pour vous.

Shaggie
la source
42
Vous pouvez également faciliter le retour par défaut au drapeau --no-edit en ajoutant un alias: "amend = commit -a --amend --no-edit"
Jherico
1
@Jherico Je suggère de supprimer -a. Veuillez faire des commits atomiques, c'est beaucoup plus facile de revoir ou de rebaser :)
frouo
120

git commit -C HEAD --amendfera ce que vous voulez. L' -Coption prend les métadonnées d'un autre commit.

Andy Ross
la source
15
Juste pour ajouter à la réponse d'Andy. Si c'est quelque chose que vous faites fréquemment, vous pouvez configurer un alias pour cela en utilisant git config --global alias.amend 'commit --amend -C HEAD'. Vous pouvez ensuite l'utiliser git amendcomme raccourci.
mikej
9
Allez les gars, ne soyez pas paresseux, mettez à jour git et utilisez la commande intégrée suggérée par Shaggle! Plus un pour l'option -C cependant.
Dimitris Baltas
4
Non seulement l'horodatage, mais aussi les informations sur la paternité!
user1338062
3
@RyanCastner En effet, le commentaire auquel vous faites référence date de 2013. Avec la version git que j'utilise actuellement --amend, même sans aucune autre option, conserve la date de l'auteur (mais modifie la date de validation). En tant que tel, j'ai supprimé mon ancien commentaire.
Ruben Verborgh
2
En fait, cette réponse a une valeur différente, même si ce n'est pas la réponse acceptée. Contrairement à l'autre réponse, vous n'avez pas à utiliser —amend. Vous pouvez créer un nouveau commit mais utiliser le même message que le commit précédent. Cela peut ne pas sembler utile, mais mon message de validation par défaut lorsque je sauvegarde juste mon travail sans avoir à trouver un bon message de validation, je continue de réutiliser le message—message=“Work in progress (untested)”
Sridhar Sarnobat
67

Une autre possibilité (idiote) est de savoir git commit --amend <<< :wqsi vous avez vi (m) as $EDITOR.

galva
la source
39
Même si ce n'est pas nécessaire pour ce cas d'utilisation, je ne savais pas que vous pouvez diriger vers vim. Cela ouvre des possibilités intrigantes. Bon conseil.
Sridhar Sarnobat
6
... <<< ZZpourrait être encore moins tapant;)
Ruslan
6
..et encore moins - ... <<< :x:)
skwisgaar
3
Je ne pense pas que ce soit idiot. C'est un excellent moyen d'améliorer le flux de travail pour toute commande qui s'ouvre vi.
B Seven
12
supports à triple angle. c'est nouveau.
oligofren
16

Pour prolonger la réponse acceptée, vous pouvez également faire:

git commit --amend --no-edit -a

pour ajouter les fichiers actuellement modifiés.

Rambatino
la source
11

Utilisation de la réponse acceptée pour créer un alias

 oops = "!f(){ \
    git add -A; \
    if [ \"$1\" == '' ]; then \
        git commit --amend --no-edit; \
    else \
        git commit --amend \"$@\"; \
    fi;\
}; f"

alors tu peux faire

git oops

et il ajoutera tout et modifiera en utilisant le même message

ou

git oops -m "new message"

modifier pour remplacer le message

aljgom
la source