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
" à la racine de la validation.
Que nouveau comportement a d'abord été discuté ici:
Personnellement, je pense que "git rebase -i --root
" doit être fait simplement, sans exiger "--onto
" et laissez-vous "modifier" même le premier dans l'histoire.
Il est compréhensible que personne n'a pris la peine, comme les gens sont beaucoup moins souvent la réécriture de près le début de l'histoire que du contraire.
Le patch suivi.
(réponse originale à cette question, février 2010)
Comme mentionné dans le Git FAQ (et ce DONC, la question), l'idée est la suivante:
- Créer de nouveaux temporaire de la branche
- Rembobiner à la livraison que vous souhaitez modifier à l'aide de
git reset --hard
- Le changement qui s'engagent (ce serait le début de la TÊTE, et vous pouvez modifier le contenu de n'importe quel fichier)
-
Rebase branche sur le dessus d'un changement de commettre, à l'aide de:
git rebase --onto <tmp branch> <commit after changed> <branch>`
Le truc est d'être sûr que les informations que vous souhaitez supprimer n'est pas réintroduite par un plus tard commettre quelque part d'autre dans votre fichier. Si vous pensez cela, alors vous devez utiliser filter-branch --tree-filter
afin de s'assurer que le contenu de ce fichier ne contient pas de toute commettre des informations sensibles.
Dans les deux cas, vous réécrire le SHA1 de chaque livraison, donc soyez prudent si vous avez déjà publié la direction générale, vous êtes en train de modifier le contenu de. Vous ne devriez probablement pas le faire sauf si votre projet n'est pas encore public et d'autres gens n'ont pas de travail hors de la commits que vous êtes sur le point de réécrire.