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.

Était-ce utile?

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:

  1. Créer nouvelle branche temporaire
  2. Retour rapide au vous vous engagez à modifier à l'aide git reset --hard
  3. Un changement qui commit (il serait supérieure de la tête en cours, et vous pouvez modifier le contenu d'un fichier)
  4. 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top