La opción --squash
a git merge
puede haber útil, y está disponible en git 1.4.1 y posterior. Esto establece los efectos de una combinación, pero no crea una confirmación. Por lo tanto, si 143eff
es la más antigua cometer desea incluir en el aplastado confirmación, su rama actual es master
y el "un mes" comprometerse es dcb7e5
, se podría hacer:
# 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.)
Ahora se puede comprobar con git diff dcb7e5 new-master
que ellos realmente son lo mismo.
Luego, si desea que rebase el resto de su trabajo en nueva-master:
$ git rebase --onto new-master dcb7e5 master
que va a dejar en un porcentualizada master
que debe tener la historia que desea. la historia (Una vez más, se puede comprobar esto con git diff old-master master
y git log
Cuando empuje principal a github que tendrá que añadir --force
desde que ha reescrito:.
# Push master to github, with "--force", since you've rewritten history:
$ git push --force origin master
Ahora puede quitar new-master
, que está en la calabaza cometió, con:
git branch -d new-master
Al parecer github corre git gc --auto
en empujones, por lo que hay que ver algunos ahorro de espacio pronto ...
posible duplicado de [¿Cómo combino los primeros dos commits de un repositorio de Git?] (Http://stackoverflow.com/questions/435646/how-do-i-combine-the-first-two-commits- of-a-git-repository) Si bien la pregunta aquí enlazada explica cómo combinar solo dos commits, las recetas allí descritas también funcionan para más commits. –
Gracias Pavel. Lo comprobaré. – dugla
¿Desea aplastar todas esas confirmaciones en una confirmación o, en realidad, desea descartar los cambios que introdujo cada una? En base a sus comentarios que quiere "descartar" y el proyecto va en una dirección diferente, no está del todo claro para mí. – masonk