¿Cómo puedo distinguir un archivo, digamos pom.xml
, de la rama principal a una versión anterior arbitraria en Git?¿Cómo se puede modificar un archivo en una versión arbitraria en Git?
Respuesta
que puede hacer:
git diff master~20:pom.xml pom.xml
... para comparar su actual pom.xml
a la de hace 20 master
las revisiones a través del primer padre. Puede reemplazar master~20
, por supuesto, con el nombre del objeto (SHA1sum) de una confirmación o cualquiera de los many other ways of specifying a revision.
Tenga en cuenta que esto es en realidad comparar el anterior pom.xml
a la versión en su árbol de trabajo, no la versión confirmada en master
. Si desea que, a continuación, puede hacer lo siguiente en su lugar:
git diff master~20:pom.xml master:pom.xml
git diff <revision> <path>
Por ejemplo:
git diff b0d14a4 foobar.txt
no funciona para la versión 1.7.11 si el archivo no está en el directorio actual. Ejemplo: 'git diff f76d078 test/Config' yields 'error: No se pudo acceder' test/f76d078 '" – simpleuser
@ user1663987 simplemente pase una ruta completa en relación con la raíz del proyecto:' git diff
test/Config * es * relativo a la raíz (como en la prueba es un subdirectorio de la raíz). pero entonces su ejemplo raíz/ruta/archivo parecería INCLUIR la raíz? – simpleuser
Si quieres ver la diferencia entre la última confirmación de un solo archivo que puede hacer:
git log -p -1 filename
Esto le dará la diferencia del archivo en git, no está comparando su archivo local.
esto no devuelve nada –
@AndreiCristianProdan Entonces no tiene cambios allí. Puedes incrementar el '-1 'paso a paso hasta que obtengas los cambios. – kaiser
para ver lo que ha cambiado en un archivo en la última confirmación:
git diff HEAD~1 path/to/file.
Puede cambiar el número (~ 1) a la enésima comprometerse que desea con diff.
Esta respuesta es realmente solo un caso específico de [esta respuesta más general] (http://stackoverflow.com/a/5586434/456814), donde 'HEAD ~ 1' se sustituye por'
esto no está funcionando! fatal: argumento ambiguo 'HEAD ~ 1': revisión desconocida o ruta no en el árbol de trabajo. Use '-' para separar las rutas de las revisiones –
git diff -w CABEZA ruta de origen/maestro/a/archivo
Para las personas interesadas en hacer lo mismo de GitHub, ver comparing commits across time.
Si necesita diff en un único archivo en un alijo por ejemplo, puede hacer
git diff [email protected]{0} -- path/to/file
sintaxis genérica:
$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
para todos los archivos denominados "Filename.xml" en cualquier parte en tu repositorio.
Aviso el espacio entre "-" y "**"
respuesta a su pregunta:
$git checkout master
$git diff oldCommit..HEAD -- **pom.xml
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml
como siempre con git, se puede utilizar un/SHA1/"CABEZA etiqueta^"a id a commit.
Probado con git 1.9.1 en Ubuntu.
Si usted está buscando el diff en un determinado cometen y desea utilizar el github interfaz de usuario en lugar de la línea de comandos (dice que quiere vincularlo a otras personas), que puede hacer:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
Por ejemplo:
Nota los enlaces anterior y siguiente en la parte superior derecha que le permiten navegar a través de todos los ficheros del envío.
Esto solo funciona para una confirmación específica, no para comparar entre dos versiones arbitrarias.
git diff master~20 -- pom.xml
Funciona si no estás en la rama principal también.
Si ni cometer es su cabeza y luego la expansión corsé de fiesta resulta muy útil, sobre todo si sus nombres de archivo son largos, el ejemplo anterior:
git diff master~20:pom.xml master:pom.xml
se convertiría en
git diff {master~20,master}:pom.xml
Más sobre Brace expansion con bash.
Para comparar a 5 se comprometen a la actual, tanto en master
, simplemente hacer:
git diff master~5:pom.xml master:pom.xml
También puede hacer referencia a cometer el número de hash, por ejemplo, si el número de hash es x110bd64
, puede hacerlo algo así para ver la diferencia:
git diff x110bd64 pom.xml
- 1. Mover a una posición arbitraria en un archivo en Python
- 2. En una fusión de git, ¿cómo se puede reemplazar su versión con la versión que dice que hay un conflicto?
- 3. No se puede modificar el archivo machine.config
- 4. No se puede recuperar un archivo en Git
- 5. Modificar FullCalendar en una versión móvil
- 6. ¿Se puede modificar un script Perl?
- 7. Resolver "CONFLICTO (eliminar/modificar)" en git
- 8. Administrar una rama de versión en Git
- 9. ¿Cómo puedo ver una versión particular de un archivo en Git?
- 10. ¿Cómo se puede modificar "Modificado por" cuando se usa RunWithElevatedPrivileges?
- 11. ¿Cómo puedo modificar la ruta del archivo en un conjunto de parches de Git?
- 12. Recortar un CALayer en una ruta arbitraria
- 13. Con git, ¿cómo se busca un patrón de archivo con `git log` en lugar de una ruta de archivo?
- 14. Modificar un archivo grande en Scala
- 15. ¿Cómo puedo archivar una rama arbitraria?
- 16. Cómo analizar y modificar un archivo HTML en Java
- 17. svn diff: Comparar mis cambios locales sin compromiso con una versión arbitraria del archivo del repositorio
- 18. ¿Cómo obtener una versión específica de un archivo en Mercurial?
- 19. ¿Cómo se puede encontrar quién fusionó un commit de git en una sucursal?
- 20. Modificar un archivo .txt en Java
- 21. ¿Cómo uso una cadena arbitraria como un candado en C++?
- 22. ¿Cómo persistir los cambios en un archivo .settings/.config en un cambio de versión de archivo?
- 23. ANT: Cómo modificar java.library.path en un archivo de compilación
- 24. Cómo marcar un solo archivo en GIT
- 25. ¿Cómo puedo "modificar" varios archivos en un solo archivo base?
- 26. PHP Modificar una sola línea en un archivo de texto
- 27. Git: eliminando un archivo de la versión, pero no eliminándolo
- 28. Cómo seguir un archivo en git
- 29. ¿Cómo modificar un archivo de texto?
- 30. git: ignorar un archivo que * es * versión controlada
Tenga en cuenta que esto no solo funciona para archivos, también funciona para (sub) directorios, por ejemplo 'git diff: foo/HEAD: foo /'. –
También tenga en cuenta que en Windows necesita utilizar barras diagonales para directorios si está utilizando un especificador de revisión o git le dará un error sobre el archivo/directorio que no existe en esa revisión. –
@DylanNissley o no le dará ningún error ni diferencia. Eso es lo que veo. En cualquier caso, gracias por la sugerencia sobre el uso de barras diagonales en lugar de barras diagonales inversas. –