2012-04-16 34 views
66

Soy novato en git y estoy trabajando en git.git - Tu sucursal está por delante de 'origin/master' por 1 commit

he añadido algunos archivos en git:

git add <file1> 
git add <file2> 

luego quería que empujar para su revisión, pero por error lo hice

git commit 

por lo que los archivos que he cambiado no van para revisiones.
Ahora bien, si entro en el comando:

git status 

Dice

# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
nothing to commit (working directory clean) 

Quiero revertir esa confirmación y quiero empujar esos archivos para su revisión antes que cometer. ¿Alguien me puede decir cómo puedo hacer eso?

+0

Si desea deshacer su confirmación, eche un vistazo a la [pregunta similar] (http://stackoverflow.com/questions/927358/git-undo-last- cometer). –

+0

No sé qué estás usando para las revisiones de código. La respuesta simple a la simple pregunta de cómo deshacer la confirmación es 'git reset HEAD ^' – Anonymoose

+0

. He reseteado HEAD. pero cuando intento presionar, entonces me dice D archivo1.py cuando intenté volver a hacer psuh, de nuevo me dice que su sucursal está por delante del origen/maestro por 1 compromiso – sam

Respuesta

97

No se puede empujar cualquier cosa que no se ha confirmado todavía. El orden de las operaciones es:

  1. Haga su cambio.
  2. git add - esto etapas los cambios por la comisión de
  3. git commit - esto compromete sus cambios por etapas localmente
  4. git push - esto empuja los cambios comprometidos con un mando a distancia

Si se presiona sin comprometerse, nada es empujado . Si comprometes sin agregar, no se compromete nada. Si agrega sin cometer nada, no pasa nada, git simplemente recuerda que los cambios que agregó deben ser considerados para la siguiente confirmación.

El mensaje que está viendo (su rama está adelantada por 1 commit) significa que su repositorio local tiene una confirmación que aún no se ha enviado.

En otras palabras: add y commit son operaciones locales, push, pull y fetch son operaciones que interactúan con un mando a distancia.

Como parece que hay un flujo de trabajo de control de código fuente oficial en el lugar donde trabaja, debe preguntar internamente cómo debe manejarse.

+3

aha ok. entonces significa que después de la confirmación, tengo que presionarlo – sam

+4

Buena explicación: la persona que pregunta probablemente no desea revertir la confirmación, sino que la gente revise la confirmación antes de enviarla al repositorio de 'origen'. También recomendaría leer algunos de los tutoriales/intros para git en http://git-scm.com/documentation – dbr

+0

Cuando mi estado de git dice "Su sucursal está por delante de 'origin/develop' por 1 commit." ¿cómo exactamente veo que los archivos fueron cambiados? git diff no parece hacer nada – Tom

3
git reset HEAD <file1> <file2> ... 

eliminar los archivos especificados desde la próxima confirmación

19

Si lo que desea es deshacerse de los cambios y volver a la última confirmación (el que quería compartir):

git reset --hard HEAD~ 

Es posible que desee verificar para asegurarse de que desea esto (git log), porque perderá todos los cambios.

Una alternativa más segura es ejecutar

git reset --soft HEAD~ # reset to the last commit 
git stash    # stash all the changes in the working tree 
git push    # push changes 
git stash pop   # get your changes back 
32

git reset HEAD^ --soft (Guarde los cambios, de vuelta a la última confirmación)

git reset HEAD^ --hard (Descartar cambios, de vuelta a la última confirmación)

12

resolví esto sólo corriendo un simple:

git pull 

Nada Más. Ahora se está mostrando:

# On branch master 
nothing to commit, working directory clean 
+0

Puede causar problemas si hay más de una rama creada que no es necesaria. –

+0

volviste a tu estado remoto y perdiste tu último trabajo: D –

2

git reset CABEZA^

entonces los archivos modificados deben aparecer.

podría mover los archivos modificados en una nueva rama

uso, git checkout -b newbranch git checkout commit -m "archivos modificados" push origin git newbranch

git checkout master

, entonces debe estar en una rama limpia, y sus cambios deben almacenarse en nueva rama. Más adelante, simplemente puede fusionar este cambio en la rama principal

Cuestiones relacionadas