L'option --squash
-git merge
pourrait être utile, et est disponible dans git 1.4.1 et plus tard. Cela déclenche les effets d'une fusion, mais ne crée pas de validation. Donc, si 143eff
est le plus ancien de vous engager à inclure dans la squashed commettras, votre succursale est master
et commit « il y a un mois » est dcb7e5
, vous pouvez faire:
# Save the old position of "master" by creating a branch old-master:
$ git checkout master
$ git branch old-master
# Create and checkout a branch called "new-master" that's at the old commit:
$ git checkout -b new-master 143eff
# Stage the effects of merging the "one month ago" commit:
$ git merge --squash dcb7e5
Updating 143eff3..dcb7e5b
Fast-forward
Squash commit -- not updating HEAD
[... status output showing the staged changes ..]
# Create the squashed commit:
$ git commit -m "A commit squashing history up to a month ago"
# (You could use --amend if you want them to be squashed into 143eff
# instead of being a commit after that.)
Maintenant, vous pouvez vérifier avec git diff dcb7e5 new-master
qu'ils sont vraiment les mêmes.
Ensuite, vous voulez rebasage le reste de votre travail sur un nouveau maître:
$ git rebase --onto new-master dcb7e5 master
qui vous laissera un rebasées master
qui devrait avoir l'histoire que vous voulez. . (Encore une fois, vous pouvez le vérifier avec git diff old-master master
et git log
Lorsque vous poussez maître vous GitHub devrez ajouter --force
depuis que vous avez réécrit l'histoire:
# Push master to github, with "--force", since you've rewritten history:
$ git push --force origin master
Vous pouvez maintenant supprimer new-master
, qui est à la commettre squash, avec:
git branch -d new-master
Apparemment github court git gc --auto
sur pousse, vous devriez voir un peu d'espace sauver bientôt ...
duplication possible de [Comment combiner les deux premières validations d'un référentiel Git?] (Http://stackoverflow.com/questions/435646/how-do-i-combine-the-first-two-commits- of-a-git-repository) Tandis que la question liée ici parle de combiner seulement deux commits, les recettes décrites ici fonctionnent aussi pour plus de commits. –
Merci Pavel. Je vérifierai. – dugla
Voulez-vous compresser toutes ces validations en une seule validation, ou voulez-vous vraiment ignorer les modifications introduites? Sur la base de vos commentaires que vous voulez "jeter" et que le projet va dans une direction différente, ce n'est pas tout à fait clair pour moi. – masonk