repositorio - git tag commits



Intercambiar programáticamente las dos últimas confirmaciones. (2)

Esto debería hacerlo:

git tag old
git reset --hard HEAD~2
git cherry-pick old
git cherry-pick old~1
git tag -d old

Primero, marque el lugar donde tiene la old , luego retroceda dos confirmaciones, git cherry-pick the commit en el otro orden y elimine la etiqueta old .

https://src-bin.com

Sé cómo intercambiar las dos últimas confirmaciones utilizando git rebase interactiva ( git rebase -i HEAD~2 , ddjp:x en Vim), pero me gustaría hacerlo mediante un script de envoltura ya que es algo que termino haciendo relativamente a menudo.

Para ser más concretos, quiero reescribir la historia desde

A---B---C---D HEAD

a

A---B---D---C HEAD

de una manera enteramente escrita. Idealmente, si el intercambio falla, debería permitirme arreglarlo de forma interactiva o simplemente rendirme y decirme que lo haga manualmente.


Answer #1

Para referencia, este es el script que terminé usando:

. "$(git --exec-path)/git-sh-setup"
require_clean_work_tree swap2

if [ -e $GIT_DIR/sequencer ]; then
    die "Cherry-pick already in progress; swap aborted"
fi

HEAD=`git rev-list --max-count=1 HEAD`
git reset --hard HEAD~2
if git cherry-pick $HEAD $HEAD^; then
    echo "Successfully swapped top two commits."
else
    git cherry-pick --abort
    git reset --hard $HEAD
    die "Failed to swap top two commits."
fi




git