En tant qu'utilisateur Git, je rencontre régulièrement la situation, que j'ai besoin de retravailler un ou plusieurs commits d'une manière qui ne rentre pas dans --amend
ou rebase -i
avec des commits de correction. En général, je ferais quelque chose comme
git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?
Je prends au sérieux les messages de commit composés et sensés. Ils contiennent généralement un texte plus grand avec des références et des justifications pour le changement. Jusqu'à présent, je suis tout à fait ennuyé le long processus pour récupérer mon ancien commettras message via un unsorted git reflog
, git log
et copier et coller processus.
Y a-t-il mieux pour s'attaquer à cela? Et comment serait-il, si mon comprend plus d'un commit?
Edit: Après avoir réfléchi un peu à cela, je pense que ce que je recherche, c'est une fonctionnalité de type git stash pour les messages de commit où la correction / modification des commits n'est pas appropriée.
la source
git reset head~1
, votre ancien message de validation ne serait-il pas simplement la deuxième entrée dureflog
?gitk
ouvrir. De cette façon, vous n'aurez même pas à utiliser le reflog. Sinon, utilisezrev-parse <branch>
pour obtenir votre hachage avant la réinitialisation et utilisez la réponse d'ibizaman.Réponses:
Après un
git reset
, ce one-liner peut le faire:ou même plus court:
Vous pouvez utiliser les autres options proposées par @ user2718704 .
la source
git commit -C@@{1}
git commit --reuse-message=ORIG_HEAD
c'est le plus clair.Lors de l'exécution de la commande "git commit", vous devez vérifier les options suivantes,
Réutilliser,
Pour modifier lors de la réutilisation,
Pour changer d'auteur,
la source
Pourquoi réinitialiser si vous pouvez pirater, réparer, pirater puis simplement exécuter
git commit --amend --no-edit
; ainsi, en conservant votre message de validation d'origine.Pour que cela fonctionne pour plusieurs commits, créez simplement un commit temporaire avec vos dernières modifications, puis utilisez un rebase interactif pour écraser le commit précédent (contenant le bon message de commit) avec le nouveau message temporaire, en conservant le message de commit de l'ancien commit.
la source
fixup
instruction pour déclarer que le dernier commit est de corriger le commit précédent et il utilisera automatiquement le message de commit de l'original en supprimant le message du commit de correction.rebase -i
. Jamais utilisé dans ce contexte. Pour les cas restants, comme la fusion à nouveau, l'autre réponse est plus appropriée à ma question, j'ai donc marqué celle-ci comme réponse.Vous pourriez envisager
git commit --reset-author -c <commit>
de réutiliser le message de validation avec l'édition et l'heure actuelle.la source