crear - git remove tag
¿Cómo saber si el último compromiso para dominar se ha introducido en el control remoto? (6)
Hacer
> git status
Si la salida es
# On branch master
nothing to commit, working directory clean
Entonces has empujado el commit actual.
Si la salida en su lugar comienza con
# On branch master
# Your branch is ahead of ''origin/master'' by 1 commit.
# (use "git push" to publish your local commits)
Entonces tienes un compromiso local que aún no ha sido empujado. Verá esto porque la rama remota, origin/master
, apunta a la confirmación que fue empujada al origen por última vez. Sin embargo, su sucursal está ahead of ''origin/master''
, lo que significa que tiene un compromiso local que se ha creado después del último compromiso enviado.
Si el compromiso que le interesa no es el más reciente, puede hacerlo
> git log --decorate --oneline
para averiguar si la confirmación en cuestión es antes o después de la confirmación señalada por origin/master
.
Si la confirmación es posterior (más arriba en el registro que) origin/master
, entonces no se ha enviado.
He fusionado una rama en maestro y ahora puedo ver eso en mi git log
Ha pasado algo de tiempo y ahora quiero saber si anteriormente también presioné master (con ese commit) en el control remoto. ¿Cómo puedo saber si ha sido empujado?
Se me ocurren algunas soluciones alternativas, como volver a instalar el repositorio en otro lugar, restablecer y verificar y luego volver a fusionar, pero creo que probablemente haya una respuesta algo más simple.
fyi esto es diferente de ¿Cómo puedo saber en git si una rama ya se ha fusionado en master? Como sé que se ha fusionado, simplemente no sé acerca del impulso remoto.
Le sugiero que ejecute esto:
$ git fetch --all
Fetching origin
Fetching upstream
Esto recuperará los últimos datos de todos los controles remotos.
Entonces corres:
$ git branch -v
master ef762af [ahead 3] added attach methods
* testing 4634e21 added -p flag
upstream 1234567 [ahead 1, behind 7] updated README.md
Esto mostrará qué ramas estás adelante o atrás.
Publiqué esto porque ninguna de las otras respuestas menciona la obtención de datos remotos, ese paso es crucial.
Prueba esto. git branch -r --contains <sha1>
Para una confirmación en mi repositorio puedo ver que existe en la rama de desarrollo remoto
git branch -r --contains 7914e54ea7e30c7f446e791df66bd3a5805c978a
origin/develop
Si ha realizado varias confirmaciones y no está seguro de cuál de ellas se ha enviado a remoto, intente esto:
git log origin/<remote-branch>..<local-branch>
Ejemplo:
git log origin/master..master
Esto incluiría una lista de todas las confirmaciones en su sucursal local que no se hayan enviado a la sucursal remota mencionada.
Una solución para hacerlo programáticamente:
test "$(git rev-parse @{u})" = "$(git rev-parse HEAD)"
También es posible que desee comprobar si su directorio local está limpio, por ejemplo, no hay archivos no confirmados modificados:
test -z "$(git status --porcelain)"
Si desea que su script se cierre si una de las reglas no se cumple, puede usar un código como:
test your_condition || (echo "ERROR: you have local changes"; exit 1)
puede utilizar git log --graph --all --decorate
, mostrará dónde se encuentra cada referencia (HEAD, master, origin / master, etc.)