Enmendar commit HEAD ~ 1 para revisión de Gerrit que comparte un file con commit HEAD

Hice una confirmación que contiene varios files y la envié a Gerrit para una revisión del código. Esto es HEAD~1 .

Luego hice otra confirmación, que también contiene varios files y la envié a Gerrit para otra revisión del código. Esta es la HEAD .

Ahora me di count de que necesito hacer una corrección en un file para la HEAD~1 confirmación HEAD~1 pero ese file también se modificó dentro del compromiso HEAD más reciente.

¿Necesito hacer el cambio en el file para HEAD~1 sin los cambios en HEAD , confirmarlo, rebase / squash que comprometen en HEAD~1 commit y presionarlo en el mismo cambio en Gerrit, y luego hacer lo mismo para el HEAD compromete?

Primero, debe mover sus cambios a las sucursales: este es, por ejemplo, su logging original

 #git log --graph --decorate --oneline -n13 * e40f865 (HEAD, master) Change 2 * 120c061 Change 1 * 73a8f97 Initial commit 

Ahora muévelos a una twig:

 #git branch changeA 120c061 #git branch changeB e40f865 #git log --graph --decorate --oneline -n13 * e40f865 (HEAD, master, changeB) Change 2 * 120c061 (changeA) Change 1 * 73a8f97 Initial commit 

Como puede ver, el cambio B depende del cambio A. Ahora reinicie el maestro para que los cambios no estén en el maestro, sino realmente en la twig:

 #git reset --hard HEAD~2 HEAD is now at 73a8f97 Initial commit 

Ahora, revise changeA y haga que cambie. El compromiso modificado:

 #git commit --amend -a [changeA 93837a4] Change 1 2 files changed, 3 insertions(+), 2 deletions(-) #git log --graph --decorate --oneline -n13 * 93837a4 (HEAD, changeA) Change 1 * 73a8f97 (master) Initial commit 

Como puede ver, el cambio 1 tiene un nuevo SHA1, el siguiente cambio de caja es B:

 #git checkout changeB Switched to branch 'changeB' #git log --graph --decorate --oneline -n13 * e40f865 (HEAD, changeB) Change 2 * 120c061 Change 1 * 73a8f97 (master) Initial commit 

Ahora ves que el cambioB todavía depende del cambio original 1, solo necesitas volver a establecer la base del cambio en el nuevo cambio 1.

 #git rebase 93837a4 First, rewinding head to replay your work on top of it... Applying: Change 1 Using index info to reconstruct a base tree... .... .... Applying: Change 2 #git log --graph --decorate --oneline -n13 * d3fac58 (HEAD, changeB) Change 2 * 93837a4 (changeA) Change 1 * 73a8f97 (master) Initial commit 

Y ahora tiene el changeB actualizado que depende de la actualización changeB y puede enviarlo de nuevo a Gerrit para su revisión

Sí: como se explica en " Cómo enmendar problemas de revisión en Gerrit cuando hay una segunda revisión más reciente también "

Cuando tiene revisiones dependientes en Gerrit (es decir, un cambio en la revisión que depende de un cambio anterior que se revisa simultáneamente), y necesita hacer modificaciones al cambio anterior, efectivamente debe volver a enviar ambos cambios (ya que el el segundo cambio se vuelve dependiente de una confirmación "principal" diferente)

Que implica:

  • un tercer compromiso
  • un git rebase -i para reorderar los commits
  • una git review nuevo