2011-06-26 8 views
61

Estoy en maestro y lo hice rebase -i <my_branch>git rebase interactivo no se compromete a recoger

conseguimos 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 recoger algunos no compromete a todos ya que algunos de ellos no son bienvenidos. Además, ¿cómo trabajas cuando quieres mantener algunos archivos o cambios siempre 'locales' en alguna rama? ¿Hay algún ayudante como .gitignore?

Respuesta

58

Al igual que una rebase no interactiva, debe volver a establecer la base en una confirmación concreta.

Con una rebase no interactiva, si proporciona un antecesor directo de la confirmación actual, entonces no está cambiando nada; con una base de datos interactiva puede editar confirmaciones después de la confirmación en la que está realizando una nueva referencia, incluso si la confirmación es un antecesor directo de su confirmación actual, pero debe especificar esta confirmación a partir de la cual desea editar.

no sé 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("-"_) ! 
20

rebase -i sin un rango de confirmación no mostrará ninguna confirmación. para reajustar el pasado, dicen, 7 compromete utilizar los siguientes:

git rebase -i HEAD~7 

tener cuidado sin embargo, que esto va a reescribir la historia. no hacerlo, si las confirmaciones ya son empujados


a su segunda pregunta: tienen una rama con sus cambios (básicamente una rama de configuración) y regularmente fusionar las otras ramas en ella. de esta manera, los cambios no se moverán a otras ramas

8

Al utilizar git rebase -i, que por lo general tienen que especificar, desde que commit quieres realizar la rebase. Por lo tanto, si, por ejemplo, que desea eliminar algunas de las confirmaciones entre los últimos 10 a la rama actual, puede hacer:

git rebase -i HEAD~10 
4

Como otros han mencionado, es necesario especificar un rango comprometerse.

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

(asumiendo que usted está en la misma rama que la confirmación tiene que ser editado) -

Para especificar las confirmaciones, puede utilizar la cabeza ~ 5 taquigrafías o utilizar sha suma de comprobación (que se puede obtener por git log)

De hecho, cualquier confirmación hará si es anterior/ancestro a las confirmaciones que desea eliminar/editar/volver a escribir en el árbol. Esto listará todas las confirmaciones desde <latest-commit-to-be-retained> en el editor (definido en su configuración de git).En la lista, para borrar una confirmación, basta con borrar esa línea en particular, guardar y salir (vi habbits :)) el archivo + editor y hacer git rebase --continue

Para la segunda respuesta, estoy de acuerdo con knittl

tiene una rama con sus cambios (básicamente una rama de configuración) y fusiona regularmente las otras ramas en ella. de esta manera los cambios se no se moverán a otras ramas

Cuestiones relacionadas