git rebase --interactive
es el comando que desea.
Ejemplo:
El estado actual es este:
bernt@le3180:~/src/stackoverflow/reordering_of_commits
$ git status
On branch master
nothing to commit, working tree clean
bernt@le3180:~/src/stackoverflow/reordering_of_commits
$ git log --oneline
a6e3c6a (HEAD -> master) Fourth commit
9a24b81 Third commit
7bdfb68 Second commit
186d1e0 First commit
Quiero reordenar las confirmaciones 9a24b81
(Tercera confirmación) y 7bdfb68
(Segunda confirmación). Para hacer esto, primero encuentro el compromiso antes del primer compromiso que queremos cambiar . Este es el compromiso 186d1e0
(primer compromiso).
El comando a ejecutar es git rebase --interactive COMMIT-BEFORE-FIRST-COMMIT-WE-WANT-TO-CHANGE
, en este caso:
bernt@le3180:~/src/stackoverflow/reordering_of_commits
$ git rebase --interactive 186d1e0
Esto abre un archivo en el editor predeterminado con el siguiente contenido:
pick 7bdfb68 Second commit
pick 9a24b81 Third commit
pick a6e3c6a Fourth commit
# Rebase 186d1e0..a6e3c6a onto 186d1e0 (3 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
Tenga en cuenta que el orden de las confirmaciones en el archivo es opuesto al que se usa para git log. En git log, la confirmación más reciente está en la parte superior. En este archivo, la confirmación más reciente está al final.
Como explica el comentario en la parte inferior del archivo, hay varias cosas que puedo hacer, como aplastar, eliminar y reordenar las confirmaciones. Para reordenar las confirmaciones, edito el archivo para que se vea así (los comentarios inferiores no se muestran):
pick 9a24b81 Third commit
pick 7bdfb68 Second commit
pick a6e3c6a Fourth commit
El pick
comando al comienzo de cada línea significa "usar (es decir, incluir) esta confirmación" y cuando guardo el archivo temporal con los comandos de rebase y salgo del editor, git ejecutará los comandos y actualizará el repositorio y el directorio de trabajo:
$ git rebase --interactive 186d1e0
Successfully rebased and updated refs/heads/master.
bernt@le3180:~/src/stackoverflow/reordering_of_commits
$ git log --oneline
ba48fc9 (HEAD -> master) Fourth commit
119639c Second commit
9716581 Third commit
186d1e0 First commit
Tenga en cuenta el historial de confirmaciones reescrito.
Enlaces: