2012-06-11 25 views
15

Esiste una funzionalità in git in cui posso confrontare i miei file locali con un controllo git source prima di eseguire le modifiche?Git Confronta i file prima del commit

+0

Stai cercando di confrontare il repository git locale con un repository github remoto? –

+0

Sì, simile a VS.NET TFS in cui è possibile fare un confronto di tutti i file modificati prima di controllare tutto. – mallows98

+0

possibile duplicato di [Git: Come visualizzare il file diff prima del commit] (http://stackoverflow.com/ domande/10039747/git-how-to-view-file-diff-before-commit) – kenorb

risposta

31

Ovviamente si può fare.

  1. Utilizzando git diff comando senza alcun argomento: sarà confrontare ogni file modificati nel file system con i file nel tag corrente ramo check-out (o).

  2. Utilizzo di git diff <tag(or)branch name>: confronta ogni file modificato nel file system con i file nel tag ramo (o) specificato.

  3. Utilizzo di git diff <path/to/file_name (or) path/to/folder>: confronta il file o i file specificati nella cartella del file system con il tag corrente estratto (o) corrente.

  4. Utilizzo di git diff <tag1(or)branch1 name> <tag2(or)branch2 name>: confronta tutti i file modificati tra due rami/tag.

Ci sono molte opzioni, è possibile passare al comando 'git diff' per formattare l'output.Qui ne ho elencato alcuni:

  • git diff --name-only: mostra solo i nomi dei file modificati, non i contenuti.
  • git diff --name-status: mostra solo i nomi e lo stato dei file modificati.
  • git diff --cached (or --staged): confronta solo i file che sono gestiti/indicizzati.

per ulteriori informazioni: eseguire git diff --help nel proprio git bash.

FYI: git diff genererà l'output nella riga di comando. Se si desidera vedere l'output in alcuni strumenti visivi, utilizzare git difftool.

Utilizzo di git difftool: è possibile configurare il git per utilizzare lo strumento di diff/unione per confrontare i file. Acquista questo link: use Winmerge inside of Git to file diff

È possibile passare tutti git diff argomenti e le opzioni per git difftool pure.

+0

grazie karthik! questo è utile! : D – mallows98

-1

Poiché i commit sono facili da modificare/modificare prima che vengano inviati, trovo più facile eseguire il commit e quindi nel registro per vedere cosa ho modificato.

Nel caso in cui non è quello che mi aspetto, modificare, ripristinare, rebase -i, ecc ...

8

Mi piace usare

git status 

Vi mostrerà quali file sono cambiati e cosa stai seguendo È quindi possibile utilizzare

git diff 

o il più GUI

gitk 

Per vedere la diff.

+2

Inoltre, se si desidera verificare cosa è stato messo in scena (nell'indice) è possibile utilizzare git diff --cached. – Russell

+0

grazie per questo! – mallows98

+0

Oh, 'gitk', wow! – Franta

0

Preferisco utilizzare questo metodo.

Uno script per il confronto

#!/bin/sh 
(        # execute in a subshell so you can continue 
           # working in the current shell 
    set -o xtrace    # bash setting that echos each command before it's executed 
    > /tmp/auto_bcompare_log # truncate existing log file 
    BCOMP_PATH=/usr/bin/bcompare 
    BRANCH="$1"    # get branch argument from command line 
    TEMPDIR=`mktemp -d`  # get a temp directory 
    CWD=`pwd`     # remember the current directory 
    git clone $CWD $TEMPDIR 
    cd $TEMPDIR 
    git checkout $BRANCH 
    cd $CWD 
    $BCOMP_PATH $CWD $TEMPDIR 
    rm -rf $TEMPDIR 
) >> /tmp/auto_bcompare_log 2>&1 < /dev/null & # background and redirect 
               # stdout/stderr/stdin 

Lo script sopra è sicuramente _non_ scritto da me. L'ho preso dalla rete, ma non sono sicuro delle fonti. Salva questo nel repository come compare.sh. Assicurati di fornire il percorso corretto per il file bcompare.

Per il confronto prima del commit.

./compare.sh <branch_you_want_to_compare> 

Che cosa questo script fa in sostanza è che, checkout il ramo che si dà come parametro in una directory temp e si apre per un confronto con il pwd. Con questo è possibile rivedere le modifiche prima di impegnarsi. Spero che questo sia quello che vuoi.

+0

Uh. In che modo è diverso da 'git diff '? – kostix

+0

kostix: ti darà solo un formato diff unificato. Non un paragone pulito come quello che va oltre il confronto. – positron