tag crear git rebase squash

git - crear - ¿Cómo usar el rebase interactivo en el primer commit(raíz) de una rama?



git rebase (2)

Desea volver a la base de la confirmación de la raíz de su rama master . Más específicamente, para aplastar los dos compromisos, necesitas ejecutar

git rebase -i --root

y luego sustituye a squash por la pick en la segunda línea en el búfer del editor que aparece:

pick 123456 a squash abcdef b

Te remito a la página git-rebase para más detalles sobre esa bandera:

--root

Cambie de base todas las confirmaciones accesibles desde <branch> , en lugar de limitarlas con una <upstream> . Esto le permite reajustar la (s) confirmación (es) raíz en una rama. [...]

Ejemplo de rebase interactiva de la raíz.

# Set things up $ mkdir testgit $ cd testgit $ git init # Make two commits $ touch README $ git add README $ git commit -m "add README" $ printf "foo/n" > README $ git commit -am "write ''foo'' in README" # Inspect the log $ git log --oneline --decorate --graph * 815b6ca (HEAD -> master) write ''foo'' in README * 630ede6 add README # Rebase (interactively) the root of the current branch: # - Substitute ''squash'' for ''pick'' on the second line; save and quit the editor. # - Then write the commit message of the resulting commit; save and quit the editor. $ git rebase -i --root [detached HEAD c9003cd] add README; write ''foo'' in README Date: Sat May 16 17:38:43 2015 +0100 1 file changed, 1 insertion(+) create mode 100644 README Successfully rebased and updated refs/heads/master. # Inspect the log again $ git log --oneline --decorate --graph * c9003cd (HEAD -> master) add README; write ''foo'' in README

Si estoy en la siguiente situación,

$ git log --oneline * abcdef commit #b * 123456 commit #a

Sé que siempre puedo correr

$ git reset HEAD~ $ git commit --amend

Sin embargo, traté de correr

$ git rebase -i HEAD~2

pero tengo

fatal: Needed a single revision invalid upstream HEAD~2

Por lo tanto, mi pregunta: ¿hay una manera de usar git rebase para aplastar estos dos compromisos o no?


Parece que este parámetro puede ayudar:

--root

Cambie de base todas las confirmaciones accesibles desde <branch>, en lugar de limitarlas con una <upstream>. Esto le permite reajustar la (s) confirmación (es) raíz en una rama.

Esto debería permitirle aplastar (supongo que realmente quiere arreglar) su segundo commit en el primero:

git rebase --root -i

Tenga cuidado al entender lo que hace la opción --root, porque en su caso responde a sus necesidades, pero puede ser complicado, por ejemplo, cuando se usa en ramas, ya que se rebautizará al ancestro más lejano en la historia al que se puede acceder (es decir, el raíz del árbol); por lo que rebase --root rebase z en a ABDEXYZ través de:

master A-B-C / upstream D-E / current branch X-Y-Z