remota - git pull example
¿Cómo hacer una vista previa de git-pull sin hacer fetch? (7)
¿Qué pasa con la clonación del repositorio en otro lugar, y haciendo git log en el pago real y el nuevo clon para ver si obtuviste lo mismo?
¿Es posible?
Básicamente, hay un repositorio remoto desde el cual lo extraigo usando solo:
git pull
Ahora, me gustaría obtener una vista previa de lo que este tirón podría cambiar (una diferencia) sin tocar nada de mi lado. La razón es que lo que estoy sacando puede no ser "bueno" y quiero que alguien más lo solucione antes de hacer que mi repositorio sea "sucio".
Creé un alias git personalizado para hacer eso por mí:
alias.changes=!git log --name-status HEAD..
con eso puedes hacer esto:
$git fetch
$git changes origin
Esto le proporcionará una manera fácil y agradable de previsualizar los cambios antes de realizar una merge
.
Creo que git fetch es lo que estás buscando.
Extraerá los cambios y los objetos sin comprometerlos con el índice de su repositorio local.
Se pueden fusionar más tarde con Git Merge .
Editar: Mayor exploración
Directamente del link Curso Crash de Git-SVN
Ahora, ¿cómo se obtienen cambios nuevos desde un repositorio remoto? Usted los trae:
git fetch http://host.xz/path/to/repo.git/
En este punto, están en su repositorio y puede examinarlos usando:
git log origin
También puedes diferenciar los cambios. También puede usar git log HEAD..origin para ver solo los cambios que no tiene en su sucursal. Entonces, si desea fusionarlos, solo haga lo siguiente:
git merge origin
Tenga en cuenta que si no especifica una bifurcación para recuperar, convenientemente será el seguimiento remoto.
Leer la página del manual honestamente le dará la mejor comprensión de las opciones y cómo usarla.
Solo estoy tratando de hacer esto con ejemplos y memoria, actualmente no tengo una caja para probar. Deberías mirar:
git log -p //log with diff
Se puede deshacer una búsqueda con el restablecimiento de git --hard ( link ), sin embargo, todos los cambios no confirmados en su árbol se perderán, así como los cambios que haya realizado.
Después de hacer una git fetch
, haga un git log HEAD..origin
para mostrar las entradas de registro entre su última confirmación común y la rama de origen. Para mostrar los diffs, use git log -p HEAD..origin
para mostrar cada parche, o git diff HEAD...origin
(tres puntos, no dos) para mostrar una única diferencia.
Normalmente no es necesario deshacer una búsqueda, ya que al realizar una búsqueda solo se actualiza la rama remota y ninguna de sus ramas. Si no está preparado para hacer un pull y combinar todas las confirmaciones remotas, puede usar git cherry-pick
para aceptar solo las confirmaciones remotas específicas que desee. Más tarde, cuando esté listo para obtener todo, un git pull se combinará en el resto de los commits.
Actualización: no estoy del todo seguro de por qué quieres evitar el uso de git fetch. Todo lo que git fetch hace es actualizar su copia local de una rama remota. Esta copia local no tiene nada que ver con ninguna de sus sucursales, y no tiene nada que ver con los cambios locales no confirmados. He oído hablar de personas que ejecutan git fetch en un trabajo de cron porque es muy seguro.
Puede que llegue tarde a la fiesta, pero esto es algo que me molestó demasiado. En mi experiencia, preferiría ver qué cambios están pendientes, que actualizar mi copia de trabajo y ocuparme de esos cambios ...
esto va al archivo ~/.gitconfig
:
[alias]
diffpull=!git fetch && git diff origin/`git rev-parse --abbrev-ref HEAD`..HEAD
capta la rama actual, que hace una diferencia entre la copia de trabajo y esta rama recuperada. entonces solo deberías ver los cambios que vendrían con git pull
.
Puede recuperar desde un repositorio remoto, ver las diferencias y luego tirar o fusionar.
Este es un ejemplo para un repositorio remoto llamado origin
y una rama llamada master
rastrea el origin/master
rama remota:
git checkout master
git fetch
git diff origin/master
git pull --rebase origin master
Uso estos dos comandos y puedo ver los archivos para cambiar.
Primero ejecutando git fetch , da salida como esta (parte del resultado):
... 72f8433..c8af041 develop -> origin/develop ...
Esta operación nos da dos identificaciones de compromiso, la primera es la anterior y la segunda será la nueva.
Luego compara estos dos commits usando git diff
git diff 72f8433..c8af041 | grep "diff --git"
Este comando mostrará una lista de los archivos que se actualizarán:
diff --git a/app/controller/xxxx.php b/app/controller/xxxx.php
diff --git a/app/view/yyyy.php b/app/view/yyyy.php
Por ejemplo, se actualizarán app / controller / xxxx.php y app / view / yyyy.php .
La comparación de dos confirmaciones utilizando git diff imprime todos los archivos actualizados con líneas modificadas, pero con grep busca y obtiene solo las líneas que contienen diff --git desde la salida.