Diferenciar la versión del archivo actual y el repositorio remoto anterior

3 minutos de lectura

Avatar de usuario de OscarRyz
oscarryz

¿Cómo puedo diferenciar la versión de mi archivo de trabajo de alguna versión anterior en el repositorio remoto?

Digamos, extraigo hoy, realizo de 6 a 8 confirmaciones en mi copia local y luego quiero ver la diferencia entre mi última versión de trabajo (de un archivo dado) y la última en el control remoto o cualquier otra versión.

  • ¿Qué software de control de revisión está utilizando? por ejemplo, Subversion, TeamCity, etc. Entonces, ¿cuál es el IDE que está usando?

    – Rob Smith

    16 mayo 2012 a las 22:04

  • Es difícil decir lo que estás preguntando. Haría esto exactamente como esperaba, pasando origin/whatever o una identificación de confirmación para git diff.

    – usuario229044

    16 mayo 2012 a las 22:08

  • @meagar Tienes razón, mira la actualización.

    – OscarRyz

    17 mayo 2012 a las 21:05

Para ver la diferencia entre su ‘última versión de trabajo’ (la tomaré como su copia de trabajo) use:

git diff <remote>/<branch>

Si cree que alguien más ha presionado el control remoto, debe buscar los cambios:

git fetch <remote> <branch>
git diff <remote>/<branch>

Si desea restringir la diferencia a solo un archivo o a todos los archivos en un directorio, use:

git diff <remote>/<branch> -- /path/to/file
git diff <remote>/<branch> -- /path/to/           #all files in directory

Puedes usar git difftool ... para iniciar una herramienta de diferencias visuales (suponiendo que exista una en su máquina).

Si está hablando de una sucursal remota, por ejemplo, origin/masterpuedes usar ~ y ^ para hacer referencia a las confirmaciones de antepasados ​​en relación con una rama de la misma manera que puede hacerlo con las ramas locales:

# what change was introduced to origin/master in the last 4 commits?
git diff origin/master origin/master~3

Si desea diferenciar su directorio de trabajo actual con el quinto compromiso más reciente en origin/masteromitiría el primer argumento:

git diff origin/master~4

  • Cuál es la diferencia entre ~ y ^ ?

    – OscarRyz

    17 mayo 2012 a las 22:40

  • @OscarRyz ^ es la confirmación anterior, ~ siempre va seguida de un número entero y significa “retroceder x confirmaciones”, por lo que ^^^ es igual a ~3

    – gansos

    10 de julio de 2013 a las 12:20


  • @ganders No, esa no es la principal diferencia. ^ es para navegar confirmaciones de combinación y elegir un padre, para navegar horizontalmente. ~ siempre avanza hacia atrás a lo largo de la primera ruta principal, para navegar verticalmente. Sería igual de probable que usara un número con ^ Al igual que con ~excepto donde ~2 dice “hace dos confirmaciones”, ^2 dice “el segundo padre de la confirmación dada”.

    – usuario229044

    10 de julio de 2013 a las 12:37


  • @meagar gracias, en realidad descubrí que estaba equivocado después de seguir este tutorial de Git pcottle.github.io/learnGitBranching/?DEMO

    – gansos

    10 de julio de 2013 a las 16:13

Suponer path/to/file.txt es un archivo que está comprometido con la rama remota origin/master y también está en mi espacio de trabajo, comprometido con la sucursal local my-branch.

Diferencia entre la última versión de path/to/file.txt confirmó la rama remota y la versión (posiblemente no confirmada) en mi espacio de trabajo:

git diff origin/master:path/to/file.txt path/to/file.txt

Diferencia entre la versión de path/to/file.txt cometió la rama remota hace tres confirmaciones y la versión (posiblemente no confirmada) en mi espacio de trabajo:

git diff origin/master~3:path/to/file.txt path/to/file.txt

Diferencia entre la última versión de path/to/file.txt comprometido la rama remota y la última versión comprometida con my-branch:

git diff origin/master:path/to/file.txt my-branch:path/to/file.txt

git fetch;  #this will attach the remote branch commits to your local tree
git diff FETCH_HEAD    #diff your working dir version of my_file vs the remote tip

same as
git diff remotes/origin/branch 

Pero primero debe hacer un git-fetch o no tendrá las confirmaciones del control remoto disponibles localmente para diferenciar

¿Ha sido útil esta solución?