¿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
dir1
dir2
el mismo repository en otra carpeta dir2
, cambie a la twig remota diff
para ver la diferencia recursiva de ambos
diff --brief -r dir1/ dir2/