J'ai commis une modification et j'ai oublié d'ajouter un fichier à l'ensemble de modifications. Après d'autres commits, j'ai réalisé que le fichier était maintenant absent d'un HEAD^4
commit.
Comment réécrire un commit précédent pour inclure le fichier manquant?
git
git-commit
Kolrie
la source
la source
Réponses:
Utilisez
git rebase --interactive HEAD~4
et définissez l'edit
option pour le commit que vous souhaitez modifier.N'oubliez pas que vous ne devez pas modifier les validations transmises au référentiel distant de cette façon. Il est préférable d'ajouter un nouveau commit avec un fichier manquant dans ce cas.
la source
git push -f
si je suis sûr que l'amont n'a pas changé?add
-ed les fichiers manquants, donc j'ai fait un commit avec "xxx" comme message. Ensuite, j'ai fait la commande rebase et j'ai changé le commit "xxx" de "pick" à "edit". Ensuite, j'ai fait "git rebase --continue". Maintenant, quand je regarde l'historique, j'ai "xxx" comme dernier commit, et le commit précédent auquel je voulais les ajouter est inchangé! Je me demande où était mon erreur?Je me rends compte que les gens peuvent google et venir ici pour trouver une réponse plus simple: et si c'était juste le dernier commit? (La question d'OP est de réparer le 4ème commit dans l'histoire)
Dans le cas où vous vous engagez et réalisez que vous avez oublié d'ajouter un fichier immédiatement , faites simplement:
Où
--no-edit
conservera le même message de validation.Peasy facile!
la source
--amend
ont des hachages différentsHEAD^4
. C'est ok comme ça, juste comme un addendum pour référence. ;)Si vous n'avez PAS poussé ces 4 commits, vous pouvez le faire comme suit:
Créez des fichiers de correctifs pour tous ces commits:
Rewind back de 4 commits:
Ajouter un fichier manquant:
Engagez-le avec
--amend
:Réappliquez tous les correctifs enregistrés:
Si vous avez poussé, vous ne devez PAS utiliser cette méthode. Au lieu de cela, admettez simplement votre erreur et créez un autre commit au-dessus de HEAD qui résout ce problème.
la source
git format-patch
/git am
beaucoup mieux. Plus important encore, cela vous donne plus de confiance si vous gâchez quelque chose - le commit enregistré sous forme de patch dans un fichier physique est votre meilleur filet de sécurité.git gc
rm *.patch
)Bien que la réponse acceptée soit correcte, il manque des instructions détaillées sur la façon de modifier un commit pendant un processus de rebase.
Commencez par lancer un processus de rebase:
Une liste des commits sera présenté, choisissez un commettras vous voulez modifier en changeant le mot
pick
pouredit
et enregistrez le fichier.Apportez les modifications nécessaires à votre code (n'oubliez pas d'appeler
git add
pour les nouveaux fichiers)Une fois toutes les modifications effectuées, émettez
git commit --amend
- cela modifiera un commit marqué commeedit
Appelez
git rebase --continue
qui terminera le processus (s'il y a plus de commits marqués commeedit
, les étapes ci-dessus doivent être répétées)Notes IMPORTANTES:
NE supprimez PAS les lignes marquées comme
pick
que vous ne souhaitez pas modifier - laissez-les telles quelles. La suppression de ces lignes entraînera la suppression des validations associéesGIT vous y oblige
stash
avant de rebaser si votre répertoire de travail n'est pas propre; vous pouvez cependantgit stash pop / git stash apply
lors du rebase, afin de modifier ces changements (c'est-à-dire les changements cachés avant de démarrer le processus de rebase) en un commit marqué commeedit
si quelque chose s'est mal passé et que vous souhaitez annuler les modifications apportées pendant le processus de rebase avant qu'il ne soit terminé (c'est-à-dire que vous voulez revenir au point avant de commencer le rebase), utilisez
git rebase --abort
- lisez également: Comment annuler un rebase interactif si --abort ne le fait pas ' t travailler?Comme indiqué dans la réponse acceptée:
La réponse se trouve dans le Git Book (paragraphe intitulé " The Perils of Rebasing "):
la source