Git diff entre cambios escalonados o no escalonados con una twig remota

¿Hay alguna manera de hacer un cambio de git entre los cambios por etapas / sin escena con una twig remota decir origen / twig1. ¿Hay una opción similar con git difftool?

O

¿Hay alguna forma de modificar los cambios en mi sistema de files local (olvídese de la escena o no) con la twig remota de git? Todo lo que quiero es verificar mis cambios antes de comprometerlos. Esto es realmente útil una vez que termine de introducir cambios y resolver conflictos con una twig remota.

¿Hay alguna manera de hacer un cambio de git entre cambios por etapas y una twig remota decir origen / twig1.

Solo corre:

 git diff --cached origin/branch1 

(Puede usar --staged aquí si lo prefiere; yo uso --cached porque git rm tiene --cached pero no --staged ). Esto le muestra una forma de cambiar el origin/branch1 para que coincida con lo que ha escenificado:

 $ git show origin/branch1:README initial version $ cat README initial version second version $ echo staged >> README && git add README $ echo replace whole thing > README $ cat README replace whole thing $ git diff --cached origin/branch1 diff --git a/README b/README index 42549ca..d9074b8 100644 --- a/README +++ b/README @@ -1 +1,3 @@ initial version +second version +staged 

Si desea ver una forma de cambiar lo que ha organizado para que coincida con origin/branch1 , agregue -R (invierta el order):

 $ git diff -R --cached origin/branch1 diff --git b/README a/README index d9074b8..42549ca 100644 --- b/README +++ a/README @@ -1,3 +1 @@ initial version -second version -staged 

Como puede ver, estos son muy diferentes de comparar sin --cached aka --staged , pero esto también es fácil:

 $ git diff origin/branch1 diff --git a/README b/README index 42549ca..acb8b7a 100644 --- a/README +++ b/README @@ -1 +1 @@ -initial version +replace whole thing 

¿Hay una opción similar con git difftool?

Estas mismas opciones (- --cached o no, y usando cualquier nombre para identificar cualquier confirmación) también están disponibles con git difftool .


Vale la pena recordar aquí que no hay realmente sucursales remotas, en Git. Hay commits que tienes, y tienes nombres para algunos de tus commits. Una posible forma de nombre es un nombre de seguimiento remoto como origin/branch1 . A algunas personas les gusta llamar a esto una "twig remota", pero es solo tu propio (local) recuerdo de Git de dónde señaló el branch1 origin branch1 algún time, cuando branch1 git fetch origin y tu Git recogió las twigs de Git.

Puedes usar git write-tree para lograr esto. Desde los documentos, "crea un object de tree a partir del índice actual", básicamente dando un "nombre" a sus contenidos por etapas.

Toma este repository de muestra. El upstream contiene un solo file f con el contenido hi

 $ git diff --staged diff --git a/fb/f index 45b983b..f471c09 100644 --- a/f +++ b/f @@ -1 +1,2 @@ hi +hello $ git diff diff --git a/fb/f index f471c09..723cb71 100644 --- a/f +++ b/f @@ -1,2 +1,3 @@ hi hello +unstaged 

A partir de esto, puede ver que un diff que agrega la línea "hola" está a punto de ser escenificado.

También hay una diferencia sin escena que agrega la línea "sin escena"

Puede comparar esto con una twig remota de la siguiente manera:

 $ git diff origin/master $(git write-tree) diff --git a/fb/f index 45b983b..f471c09 100644 --- a/f +++ b/f @@ -1 +1,2 @@ hi +hello 

En este caso, pasa a ser lo mismo que git diff --staged pero si git diff --staged la twig upstream un poco:

 $ git fetch -q && git show origin/master | tail -7 diff --git a/fb/f index 45b983b..5f69508 100644 --- a/f +++ b/f @@ -1 +1,2 @@ hi +from upstream 

Ahora vemos los cambios completos:

 $ git diff origin/master $(git write-tree) diff --git a/fb/f index 5f69508..f471c09 100644 --- a/f +++ b/f @@ -1,2 +1,2 @@ hi -from upstream +hello 

Una forma de lograr esto es

  • Digamos que ha organizado cambios en una carpeta dir1
  • dir2 el mismo repository en otra carpeta dir2 , cambie a la twig remota
  • Utilice el command unix diff para ver la diferencia recursiva de ambos
    directorys

diff --brief -r dir1/ dir2/