Con git rebase, ¿hay alguna forma de volver a networkingactar los posts de confirmación en git-rebase-todo utilizando los commands pnetworkingeterminados?

Supongamos que ejecuto git rebase -i HEAD~3

 pick 6b24464 foo pick a681432 Foo pick 8ccba08 foo foo # Rebase 960c384..8ccba08 onto 960c384 # # 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 

Me gustaría volver a networkingactar los posts de confirmación directamente desde este file, en lugar de editar cada post de confirmación de uno en uno (como suele ser habitual con la reword ), así:

 reword 6b24464 foo bar reword a681432 Foo Bar reword 8ccba08 foo foo bar bar # Rebase 960c384..8ccba08 onto 960c384 # # 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 

Tenía la esperanza de que esto se pudiera hacer usando solo reword o edit , pero parece que no puedo averiguar cómo (si es posible). Pude lograr el mismo resultado con

 x git cherry-pick 6b24464 && git commit -amend "foo bar" 

Sin embargo, esto consume más time del que me gustaría para rebases grandes. ¿Algunas ideas?

No creo que se pueda hacer, porque cuando haces un git rebase -i obtienes solo la primera línea de cada post de confirmación, no el post de confirmación completo.

Como una convención, un post de compromiso debe tener la primera línea como un resumen y tener más detalles sobre el cambio en las siguientes líneas. Aquí está Linus Torvalds sobre cómo escribir un post de compromiso adecuado

Por lo tanto, aunque haya hecho solo una línea de post por confirmación, esto no es lo que git está asumiendo, por lo que no le permitirá editar un post de confirmación a través de una "vista de una línea por confirmación".

Probablemente pueda usar la opción exec para lograr lo que quiere.

Use un command exec similar a git commit --amend -m "this is the new message"

Puede usarlo directamente, o si necesita más sofisticación, my_reword en un script externo llamado my_reword .

 #!/bin/sh git commit --amend -m "$1" 

Luego agrega la línea exec donde quieras

 pick 6b24464 foo pick a681432 Foo x my_reword "this is a new message" pick 8ccba08 foo foo 

No, no puede volver a networkingactar los posts en el file rebase TODO.

La razón de esto: Git está aplicando la rebase de arriba a abajo. El file TODO solo le dice a Git en qué order realizar una operación de rebase, y cuál es su acción (squash, reword, use, fixup, etc.). Luego se basa en otros mecanismos (como commit ) para manejar el rest.

Si se compromete a networkingactar de nuevo, obtendrá muchas instrucciones para editar el post, que es lo que debería esperar ; está creando una nueva confirmación [independientemente] con un nuevo post, por lo que Git debería pedirle que la ingrese mientras está en el medio de procesar la operación de rebase.

Aconsejo fuertemente en contra de grandes operaciones de rebase ya que lleva a este tipo de cosas mundanas, y tiene el riesgo de ser más peligroso de lo que vale.