Le premier changement validation de projet avec Git? [dupliquer]
-
20-09-2019 - |
Question
Cette question a déjà une réponse ici:
- Modifier la racine de validation dans Git? 5 réponses
Je veux changer quelque chose dans le premier engagement de mon projet sans perdre tous les commits suivantes. Est-il possible de le faire?
J'ai accidentellement énuméré mon email brut dans un commentaire dans le code source, et je voudrais changer comme je spammé contre les robots collecteurs s'indexation GitHub.
La solution
Comme mentionné par ecdpalma ci-dessous , git 1.7.12+ (Août 2012) a amélioré l'option --root
pour git rebase
:
« git rebase [-i] --root $tip
» peut maintenant être utilisé pour réécrire toute l'histoire menant à « $tip
» jusqu'à la validation racine.
Ce nouveau comportement a d'abord été discuté ici :
Je pense personnellement «
git rebase -i --root
» devrait être juste travailler sans exiger «--onto
» et laissez-vous « modifier » même le premier dans l'histoire.
Il est compréhensible que personne ne se souciait, car les gens sont beaucoup moins souvent réécriture près du début de l'histoire que le contraire.
Le patch rel="noreferrer"> .
(réponse originale, Février 2010)
Comme mentionné dans le (et cette question SO ), l'idée est la suivante:
- Créer nouvelle branche temporaire
- Retour rapide au vous vous engagez à modifier à l'aide
git reset --hard
- Un changement qui commit (il serait supérieure de la tête en cours, et vous pouvez modifier le contenu d'un fichier)
-
Rebase branche au-dessus de changé commit, en utilisant:
git rebase --onto <tmp branch> <commit after changed> <branch>`
L'astuce est d'être sûr que les informations que vous souhaitez supprimer n'est pas présentée à nouveau par un commit plus tard un autre endroit dans votre dossier. Si vous pensez que, alors vous devez utiliser filter-branch --tree-filter
pour vous assurer que le contenu de ce fichier ne contient en aucun commettre des informations sensibles.
Dans les deux cas, vous finissez par réécrire le SHA1 de chaque engagement, soyez donc prudent si vous avez déjà publié la branche que vous modifiez le contenu. Vous ne devriez pas le faire à moins que votre projet n'est pas encore public et d'autres personnes ont du travail non basé sur l'commits que vous êtes sur le point de réécrire.
Autres conseils
Comme indiqué dans 1.7.12 Notes de version , vous pouvez utiliser
$ git rebase -i --root
git rebase -i
vous permet d'éditer facilement les commits précédents, sauf pour la racine commit . Les commandes suivantes vous montrent comment faire manuellement.
# tag the old root, "git rev-list ..." will return the hash of first commit
git tag root `git rev-list HEAD | tail -1`
# switch to a new branch pointing at the first commit
git checkout -b new-root root
# make any edits and then commit them with:
git commit --amend
# check out the previous branch (i.e. master)
git checkout @{-1}
# replace old root with amended version
git rebase --onto new-root root
# you might encounter merge conflicts, fix any conflicts and continue with:
# git rebase --continue
# delete the branch "new-root"
git branch -d new-root
# delete the tag "root"
git tag -d root
Si vous souhaitez modifier uniquement le premier commit, vous pouvez essayer rebasage git et modifier le commit, qui est similaire à ce poste: Comment modifier un engagement dans git spécifié
Et si vous voulez modifier tous les commits qui contiennent l'e-mail brut, filtre-branche est le meilleur choix. Il est un exemple de la façon de changer l'adresse e-mail dans le monde sur le livre Pro Git , et vous pouvez trouver ce lien utile http://git-scm.com/book/en/Git-Tools-Rewriting-History