¿Cómo saber qué files habría escrito una tirada de git que he cambiado desde el último git pull o git push?

Estoy trabajando en una twig principal en dos máquinas diferentes y envié el código a un repository remoto en una de las máquinas.

Intento enviar el código al repository remoto desde la otra máquina pero recibo el error

! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes (eg 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details. 

Estoy planeando hacer una $ git pull pero quería saber si había alguna manera de saber qué files se habían escrito por escrito, que hice cambios locales desde el último git pull desde el repository remoto o git push del repository remoto

No estoy interesado en una list completa de files modificados.

No estoy seguro de si realmente entiendo lo que quiere, así que nombraré algunas posibles situaciones y resoluciones.

  1. Si desea conocer los files de su sucursal local diferente de su contraparte remota:

     git diff --name-status master origin/master 
  2. Si planea sacar, pero quiere saber qué se modificará:

     git pull --no-commit 

    git le dejará un tree de trabajo fusionado y podrá verificar los files modificados por command como git status .

  3. Si quieres hacer un historial limpio, te recomiendo (tal vez no lo planeaste)

     git pull --rebase 

    obtendrá el último código del control remoto y aplicará los cambios locales en él.

No conozco ninguna forma interna de hacer esto (aunque no me sorprendería descubrir que había uno) pero creo que los siguientes deberían hacer lo que quieran (después de haber obtenido los cambios remotos al less) .

 # Find merge base between the branch heads. mb=$(git merge-base master origin/master) # List of files changed by local master. git diff --name-only $mb master # List of files changed by origin/master. git diff --name-only $mb origin/master # List of files changed by both heads. comm -1 -2 <(git diff --name-only $mb master) <(git diff --name-only $mb origin/master) 

Para saber qué (files cambiados localmente y no comprometidos) se superponen con los files modificados en la twig remota, intente:

 # List of files locally changes (uncommitted). git diff --name-only # List of files changed in working directory and on remote branch. comm -1 -2 <(git diff --name-only) <(git diff --name-only $mb origin/master) 

Cabe señalar que la versión modificada localmente no marcará los files agregados localmente (a less que haya utilizado git add -N para contarle a git sobre ellos).

Primero asegúrese de hacer una git fetch para que sepa que su sucursal remota está actualizada. Luego puede usar este trazador de líneas para get las diferencias en los files no comprometidos y el control remoto.

 git status | grep "(modified|deleted)" | awk '{print $3}' | git diff <remote branch name> 

Este command toma el git status y encuentra los files modificados, los analiza para que solo tenga los nombres de los files. Finalmente crea un diff del origen con esos nombres de file.

Deberá examinar la diferencia para los cambios específicos, pero obtendrá la información sobre los cambios no confirmados.