107 votes

Comment réorganiser tous les commits depuis le début

Donc je migre de svn (code.google.com) à git (github).

J'ai importé mon projet depuis le dépôt svn, et il a importé tout l'historique des commits le long du chemin. Je ne suis pas vraiment fier de ces commentaires car c'était l'un de mes premiers projets, pas vraiment sérieux.

J'aimerais remettre tout à zéro dans un seul commit 'import initial'.

J'ai tout récupéré sur mon ordinateur et j'essaie de le faire. Mais tout ce que j'ai trouvé était: git rebase -i master mais cela ne rebase que les nouvelles modifications et les nouveaux commits.

Comment puis-je nettoyer mon dépôt github de tout l'historique avec un rebase ?

278voto

Toby J Points 942

git rebase -i --root démarrera un rebase interactif de tous les commits depuis le début.

À partir de là, vous pourrez regrouper tous les commits en un seul et/ou effectuer d'autres modifications.

21voto

Jefromi Points 127932

Vous pourriez refaire base et écraser tout si vous le vouliez (sauf le commit initial) mais pourquoi se donner la peine? Il suffit de supprimer votre répertoire .git, d'exécuter git init pour le recréer, d'ajouter git add tout, et de git commit pour faire un nouveau commit initial.

11voto

Kevin M Granger Points 154

La réponse de Jefromi fonctionnera, mais si vous voulez conserver votre configuration de dépôt existante, ou même laisser les commits en place au cas où, vous pouvez faire ce qui suit :

git checkout master

git branch backup laissez éventuellement une autre branche ici au cas où vous voudriez conserver votre historique.

git reset --soft $SHA_OF_INIT_COMMIT cela mettra à jour vers quoi HEAD pointe, mais laissera votre index et votre répertoire de travail dans leur état actuel. Vous pouvez obtenir le SHA avec git log --pretty=format:%h --reverse | head -n 1, et faire cela en une étape avec git reset --soft $(git log --pretty=format:%h --reverse | head -n 1)

git commit --amend modifiez votre commit initial pour pointer vers l'état actuel de votre dépôt.

5voto

Abizern Points 52378

Trouvez le hachage du commit à partir duquel vous voulez commencer le squash, disons abcd12, puis rebasez-vous spécifiquement contre ce hachage.

git rebase -i abcd12

Vous utilisez master pour rebase, ce qui effectue le rebase contre la pointe de la branche master.

3voto

Jan Points 8207

Si vous souhaitez réduire toute votre historique à un seul commit "Importation initiale", il suffit de supprimer le répertoire .git et de créer un nouveau dépôt local (en faisant une sauvegarde de l'ancien). git init . && git add . && git commit -m "Importation initiale".

Ce nouveau dépôt n'aura pas d'ancêtre commun avec celui que vous avez poussé vers GitHub, vous devrez donc faire un git push --force sur votre dépôt nouvellement créé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X