2009-08-20 9 views
2

Je dois réécrire l'historique de mon dépôt car il contient des informations d'identification. Comme je dois modifier la racine engager je suivi les instructions de Git Faq:Git, modifier la validation racine pour toutes les branches

git rebase -i vous permet d'éditer facilement les commits précédents, à l'exception de la validation racine. Les commandes suivantes vous montrent comment faire cela manuellement.

# tag the old root 
git tag root `git rev-list HEAD | tail -1` 
git checkout -b new-root root 
# edit... 
git commit --amend 

# check out the previous branch 
git checkout @{-1} 
# replace old root with amended version 
git rebase --onto new-root root 

# cleanup 
git branch -d new-root 
git tag -d root 

Mon problème est que j'ai deux branches et plusieurs balises déjà dans le référentiel et je voudrais que mon histoire rewrite à appliquer à ceux qui sont trop. Le repo n'est pas encore public, donc ce ne serait pas un problème. J'ai déjà demandé un similar question, mais dans ce cas, la commande git rebase n'a pas été utilisée. Voici un graphique de base de mon repo:

+ master branch 
| 
| + topic branch 
| | 
| | 
+---+ 
| 
| 
| 
+ TAG 
| 
+ Initial commit, the commit I'd like to amend for all branches 

Est-ce encore possible?

+0

Peut-être lié: [Modifier/modifier/modifier/modifier la première/racine/initiale de validation dans Git?] (Http://stackoverflow.com/q/2119480/456814). –

Répondre

6

Utilisez "git filter-branch" au lieu de git-rebase.

Si vous pensez vraiment, vraiment que rebase serait mieux, avec git moderne, vous pouvez utiliser --root option de git-rebase. Ou bien choisissez la racine de la validation, puis rebasez dessus, si vous avez un ancien git qui n'a pas cette option.

+0

Merci Jakub. Mais je ne suis pas vraiment sûr de savoir comment 'filter-branch' m'aidera. Je dois éditer le code dans près de 10 fichiers, de sorte que je prétende que le premier commit n'avait pas d'identifiants dedans. Je ne sais pas comment cela serait possible parce qu'il n'y a pas de format standard pour ces fichiers. C'est juste du code. Je pense qu'il serait possible d'utiliser '--tree-filter', mais cela semble compliqué à analyser le code. –

+2

Si tel est le cas, la solution la plus simple serait de créer une nouvelle branche vide ('git symbolic-ref HEAD refs/heads/new && rm -f .git/index'), et soit cerise-pick racine de validation sur cette branche et éditez-le en utilisant 'git commit --amend', puis rebassez le reste, ou utilisez' git rebase --interactive --root - new master'. HTH. –

+0

Merci, je vais essayer les deux, bien que la deuxième option semble plus facile. Très appréciée. –

Questions connexes