2010-04-11 20 views
23

Cuando hago un 'git pull', tengo un conflicto con la confirmación del encabezado. Así que hice un 'git rebase --abort'¿Cómo puedo eliminar mi última confirmación en mi repositorio local de git

¿Puedo 'guardar' mi compromiso con un "parche" y luego hacer un git pull?

Lo que quiero emular es:

  • no había cometido, pero lo hice un 'escondite git' en lugar
  • Hacer un git pull para evitar cualquier error de combinación

Así Necesito de alguna manera 'retroceder el reloj'. ¿Es eso posible con git?

Respuesta

56

su parche 7826b2 seguirá siendo causar un conflicto cuando se aplica después de tirar, pero se puede hacer lo siguiente:

git reset --soft HEAD^ 
git stash 
git pull 
git stash pop # Will cause a conflict 
git commit # Re-commit 7826b2 

otro flujo de trabajo también es posible:

git reset --hard HEAD^ 
git pull 
git cherry-pick 7826b2 # Will cause a conflict 

El segundo flujo de trabajo se basa en el hecho de que Git mantiene el compromiso 7826b2 en el reflog (puede considerarlo como la papelera de reciclaje) aunque restableció los cambios que introdujo con la primera línea.

0

Hay un camino, de hecho en git, estoy seguro de que hay una multitud de maneras de hacerlo ...

que podría hacer:

git stash  # Stash your changes 
git pull  # Pull the changes 
git stash pop # Pop your stash 

que podría hacer:

git pull --rebase # Bring in the changes and apply yours on top of it. 

Se podría hacer:

git stash  # Stash your changes 
git checkout <commit> # Pull a specific commit. 
git stash pop # Pop your stash 

Espero que ayude.

4

Si ha realizado de confirmar sus cambios en el repositorio local, se podría hacer un rebase recta:

git fetch origen

git rebase origin/master

Esto se desenrolla de su localidad se compromete desde el maestro local, aplica nuevas confirmaciones desde el origen/maestro y luego reproduce las confirmaciones locales.

En su caso, esto generará un conflicto y git le dirá qué archivos se deben editar para resolver el conflicto. Después de hacerlo, git add esos archivos y luego git commit sin argumentos para volver a comprometer los cambios.

+0

esto es lo que estaba buscando para, genial. –

0

En primer lugar me sugieren hacer una copia de seguridad de la sucursal:

git branch your_branch_backup 

A continuación, la forma más fácil es:

git reset --soft <commit> #Go back in time but without loosing your changes 
git stash     #Stash your changes 
git pull     #Refresh your branch with origin 
git stash pop    #Re-apply your changes on the refreshed branch 

A continuación, puede cometer como de costumbre

Cuestiones relacionadas