git - significado - difiero de lo que dices
¿Cómo difiero el mismo archivo entre dos confirmaciones diferentes en la misma rama? (10)
En Git, ¿cómo podría comparar el mismo archivo entre dos confirmaciones diferentes (no contiguas) en la misma rama (maestra, por ejemplo)?
Estoy buscando una función de comparación como la de Visual SourceSafe (VSS) o Team Foundation Server (TFS). ¿Es posible en Git?
Aquí hay un script de perl que imprime los comandos de git diff para un archivo dado como se encuentra en un comando de registro de git.
p.ej
git log pom.xml | perl gldiff.pl 3 pom.xml
Rendimientos:
git diff 5cc287:pom.xml e8e420:pom.xml
git diff 3aa914:pom.xml 7476e1:pom.xml
git diff 422bfd:pom.xml f92ad8:pom.xml
que luego se podría cortar N pegado en una sesión de ventana de shell o canalizado a / bin / sh.
Notas:
- el número (3 en este caso) especifica cuántas líneas imprimir
- el archivo (pom.xml en este caso) debe coincidir en ambos lugares (puede ajustarlo en una función de shell para proporcionar el mismo archivo en ambos lugares) o ponerlo en un directorio bin como un script de shell
Código:
# gldiff.pl
use strict;
my $max = shift;
my $file = shift;
die "not a number" unless $max =~ m//d+/;
die "not a file" unless -f $file;
my $count;
my @lines;
while (<>) {
chomp;
next unless s/^commit/s+(.*)//;
my $commit = $1;
push @lines, sprintf "%s:%s", substr($commit,0,6),$file;
if (@lines == 2) {
printf "git diff %s %s/n", @lines;
@lines = ();
}
last if ++$count >= $max *2;
}
Si desea hacer una diferencia con más de un archivo, con el método especificado por @mipadi:
Por ejemplo, diferencia entre HEAD
y tu master
, para encontrar todos los archivos .coffee
:
git diff master..HEAD -- `find your_search_folder/ -name ''*.coffee''`
Esto buscará recursivamente su your_search_folder/
para todos los archivos .coffee
y hará una diferencia entre ellos y sus versiones master
.
Si desea una comparación visual simple en Windows, como la que puede obtener en VSS o TFS, intente esto:
- Haga clic derecho en el archivo en el Explorador de archivos
- seleccione ''Git History''
Nota: Después de actualizar a Windows 10, he perdido las opciones del menú contextual de git. Sin embargo, puede lograr lo mismo usando ''gitk'' o ''gitk filename'' en una ventana de comando.
Si ha hecho clic en ''Historial de Git'', se iniciará la herramienta GUI de Git, con un historial del archivo en el panel superior izquierdo. Seleccione una de las versiones que le gustaría comparar. Luego haga clic derecho en la segunda versión y elija
Diff esto -> seleccionado
o
Diff seleccionado -> este
Las diferencias codificadas por colores aparecerán en el panel inferior izquierdo.
Si desea ver todos los cambios en el archivo entre los dos confirmaciones en una base de confirmación por confirmación, también puede hacer
git log -u $start_commit..$end_commit -- path/to/file
Si ha configurado el "diftool" puede utilizar
git difftool revision_1:file_1 revision_2:file_2
Ejemplo: comparar un archivo de su último compromiso con su confirmación anterior en la misma rama: suponiendo que si está en la carpeta raíz del proyecto
$git difftool HEAD:src/main/java/com.xyz.test/MyApp.java HEAD^:src/main/java/com.xyz.test/MyApp.java
Debe tener las siguientes entradas en su archivo ~ / .gitconfig o en el archivo project / .git / config. Instale el p4merge [Esta es mi herramienta preferida de combinación y fusión]
[merge]
tool = p4merge
keepBackup = false
[diff]
tool = p4merge
keepBackup = false
[difftool "p4merge"]
path = C:/Program Files (x86)/Perforce/p4merge.exe
[mergetool]
keepBackup = false
[difftool]
keepBackup = false
[mergetool "p4merge"]
path = C:/Program Files (x86)/Perforce/p4merge.exe
cmd = p4merge.exe /"$BASE/" /"$LOCAL/" /"$REMOTE/" /"$MERGED/"
Si tiene varios archivos o directorios y desea comparar confirmaciones no continuas, puede hacer esto:
Hacer una rama temporal
git checkout -b revision
Rebobinar al primer objetivo de compromiso
git reset --hard <commit_target>
Cereza recogiendo en los comprometidos interesados.
git cherry-pick <commit_interested> ...
Aplicar dif
git diff <commit-target>^
Cuando termines
git branch -D revision
Solo otra forma de usar la genialidad de Git ...
git difftool HEAD HEAD@{N} /PATH/FILE.ext
También puede comparar dos archivos diferentes en dos revisiones diferentes, como esta:
git diff < revision_1 >:< file_1 > < revision_2 >:< file_2 >
Verifique $ git log
, luego copie el ID de SHA de 2 confirmaciones diferentes y luego ejecute el comando git diff
con esos identificadores, por ejemplo:
$ git diff (sha-id-one) (sha-id-two)
De la página del git-diff
:
git diff [--options] <commit> <commit> [--] [<path>...]
Por ejemplo, para ver la diferencia de un archivo "main.c" entre ahora y dos confirmaciones, aquí hay tres comandos equivalentes:
$ git diff HEAD^^ HEAD main.c
$ git diff HEAD^^..HEAD -- main.c
$ git diff HEAD~2 HEAD -- main.c