git: tu rama está por delante de 'origin / master' por 1 confirmación

107

Soy novato en git y estoy trabajando en git.

Agregué algunos archivos en git:

git add <file1>
git add <file2>

luego quise presionar eso para revisión, pero por error lo hice

git commit

para que los archivos que he cambiado no se revisen.
Ahora si entro 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 ese compromiso y quiero enviar esos archivos para revisión en lugar de confirmar. ¿Alguien puede decirme cómo puedo hacer eso?

sam
fuente
Si desea deshacer su confirmación, eche un vistazo a la pregunta similar .
ДМИТРИЙ МАЛИКОВ
1
No sé qué estás usando para las revisiones de código. La respuesta simple a la simple pregunta de cómo git reset HEAD^
cancelar el
reinicié HEAD. pero luego, cuando trato de presionar, me dice D file1.py cuando intenté psuh, luego nuevamente me dice que su rama está por delante del origen / maestro por 1 confirmación
sam
¿Qué quiere decir cuando dice "Quiero enviar esos archivos para su revisión"? ¿Quieres que otras personas vean tu compromiso?
Jake Greene
Mi código se revisará primero y luego se confirmará. así que primero quiero enviar el código para su revisión, pero me he comprometido por error
sam

Respuestas:

128

No puedes empujar nada que aún no se haya cometido. El orden de operaciones es:

  1. Haz tu cambio.
  2. git add - esto pone en etapa sus cambios para confirmar
  3. git commit - esto confirma sus cambios por etapas localmente
  4. git push - esto empuja sus cambios comprometidos a un control remoto

Si empuja sin comprometerse, no se empuja nada. Si se compromete sin agregar, no se compromete nada. Si agrega sin confirmar, no pasa nada, git simplemente recuerda que los cambios que agregó deben considerarse para la siguiente confirmación.

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

En otras palabras: addy commitson operaciones locales push, pully fetchson operaciones que interactúan con un control remoto.

Dado que parece haber un flujo de trabajo de control de fuente oficial en el lugar donde trabaja, debe preguntar internamente cómo se debe manejar esto.

tdammers
fuente
4
Aja ok. entonces significa que después de confirmar, tengo que presionarlo
sam
4
Buena explicación: el interrogador probablemente no quiera revertir la confirmación, sino que la gente la revise antes de enviarla al originrepositorio. También recomendaría leer algunos de los tutoriales / intros para git en git-scm.com/documentation
dbr
1
Cuando mi estado de git dice "Tu rama está por delante de 'origen / desarrollo' por 1 confirmación". ¿Cómo veo exactamente que se cambiaron los archivos? git diff no parece hacer nada
Tom
A veces hay alguien más que trabajó allí. Haga un tirón antes de empujar
Adrian P.
67

git reset HEAD^ --soft (Guarde sus cambios, vuelva a la última confirmación)

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

Juanito Fatas
fuente
3
¿Cuál es el significado de la CABEZA con una zanahoria '^'? También he visto que se escribe sin la zanahoria.
Mugen
29

Si solo desea deshacerse de los cambios y volver a la última confirmación (la 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 correr

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 
Shep
fuente
21

Resolví esto simplemente ejecutando un simple:

git pull

Nada mas. Ahora se muestra:

# On branch master
nothing to commit, working directory clean
karlingen
fuente
Puede causar problemas si se crea más de una rama que no es necesaria.
Anil Kumar Arya
1
Gucho Ca
13

git reset HEAD ^

entonces deberían aparecer los archivos modificados.

Puede mover los archivos modificados a una nueva rama

utilizar,

git checkout -b newbranch

git checkout commit -m "files modified"

git push origin newbranch

git checkout master

entonces debería estar en una rama limpia, y sus cambios deberían almacenarse en newbranch. Más tarde, podría fusionar este cambio en la rama maestra

OZI
fuente
4
git reset HEAD <file1> <file2> ...

eliminar los archivos especificados de la siguiente confirmación

Bnjmn
fuente