Rebase interactiva de Git sin compromisos para elegir

105

Estoy en el maestro y lo hice rebase -i <my_branch>

Tengo esto:

noop

# Rebase c947bec..7e259d3 onto c947bec
#
# 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 <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Me gustaría elegir algunos compromisos, no todos, ya que algunos de ellos no son bienvenidos. Además, ¿cómo funciona cuando desea mantener algunos archivos o cambios siempre 'locales' en alguna rama? ¿Hay algún ayudante como .gitignore?

Lukasz
fuente

Respuestas:

85

Al igual que una rebase no interactiva, debe reabastecerse en una confirmación en particular.

Con una rebase no interactiva, si proporciona un antepasado directo de la confirmación actual, no cambiará nada; con una nueva base de datos interactiva, puede editar las confirmaciones después de la confirmación en la que está reajustando, incluso si la confirmación es un antepasado directo de su confirmación actual, pero debe especificar esta confirmación desde la que desea editar en adelante.

No conozco los detalles de su situación, pero es posible que desee algo como esto:

# Opportunity to edit or prune commits between origin/master and current branch
git rebase -i origin/master

o

# Edit some of the last ten commits
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !
CB Bailey
fuente
Usar la HEAD~*sintaxis funcionó para mí, pero el primero no.
Dev Yego
25

rebase -isin un rango de confirmación no mostrará ninguna confirmación. para reajustar las últimas, digamos, 7 confirmaciones, use lo siguiente:

git rebase -i HEAD~7

Sin embargo, tenga cuidado de que esto reescribirá la historia. no lo hagas, si las confirmaciones ya están presionadas


para su segunda pregunta: tenga una rama con sus cambios (básicamente una rama de configuración) y combine regularmente las otras ramas en ella. de esta forma los cambios no se trasladarán a otras ramas

Knittl
fuente
9

Cuando está usando git rebase -i, generalmente tiene que especificar, desde qué confirmación desea realizar el rebase. Entonces, si, por ejemplo, desea eliminar algunas de las confirmaciones entre las últimas 10 en la rama actual, debe hacer:

git rebase -i HEAD~10
svick
fuente
6

Como han mencionado otros, debe especificar un rango de confirmación.

git rebase -i <latest-commit-to-be-retained>

(Suponiendo que está en la misma rama que la confirmación que se va a editar) -

Para especificar las confirmaciones, puede usar las abreviaturas HEAD ~ 5 o usar la suma de comprobación sha (que puede obtener git log)

De hecho, cualquier confirmación servirá si es anterior / antecesora a las confirmaciones que desea eliminar / editar / reformular en el árbol. Esto enumerará todas las confirmaciones desde el <latest-commit-to-be-retained>en el editor (definido en su configuración de git). De la lista, para eliminar una confirmación, simplemente elimine esa línea en particular, guarde y salga (vi habbits :)) el archivo + editor, y hagagit rebase --continue

Para la segunda respuesta, estoy de acuerdo con knittl

tener una rama con sus cambios (básicamente una rama de configuración) y fusionar regularmente las otras ramas en ella. de esta forma los cambios no se trasladarán a otras ramas

0xc0de
fuente