2013-06-20 15 views
49

Esiste qualcosa come git pull --dry-run per vedere come verranno uniti i file prima che rovini il mio albero di lavoro?Esiste un'opzione "git pull --dry-run" in Git?

In questo momento sto facendo:

git fetch origin && git merge --no-commit --no-ff 

non ho visto nulla nella pagina di manuale di 'git-pull' ad essa correlata.

Per chiarire, ho solo bisogno di uno script Ant per la distribuzione per vedere se ci sono conflitti quando si fa git pull, poi di nuovo fuori uscita fuori di costruzione, non riuscire distribuzione e lasciare che l'albero di directory lo stesso che era prima git pull.

+1

Perché ci sarebbero conflitti? Il tuo script di implementazione sta effettuando commit locali e, in caso affermativo, perché? –

risposta

39

Ho sempre fatto affidamento sulle capacità intrinseche di Git per riprendermi se una fusione fallisce.

per stimare quanto potrebbe verificarsi l'unione, si può iniziare a come avete fatto con:

$ git fetch origin branch # Fetch changes, but don't merge 
$ git diff HEAD..origin/branch # Diff your current head to the fetched commit 

... personal judgement of potential merge conflicts ... 

$ git merge origin/branch # merge with the fetched commit 

Se le cose non sono andate come previsto, guardare il vostro reflog e ripristinare di nuovo al vostro stato desiderato:

$ git reflog 
... 
abc987 [email protected]{0}: merge activity 
b58aae8 [email protected]{1}: fetch origin/branch 
8f3a362 [email protected]{2}: activity before the fetch 
... 
$ git reset --hard HEAD{2} 
+0

Puoi anche provare questo dato che il pull è in qualche modo simile alla fusione [http://stackoverflow.com/questions/501407/is-there-a-git-merge-dry-run-option](http://stackoverflow.com/questions/501407/is-there-a-git-merge-dry-run-option) – scireon

+0

'fatale: argomento ambiguo 'HEAD..origin/branch': revisione sconosciuta o percorso non presente nell'albero di lavoro. – Green

15

È possibile ottenere l'effetto desiderato creando un nuovo ramo di scarto da quello attuale e eseguendo lo git pull. Se non sei soddisfatto dei risultati, il ramo originale è intatto.

+0

vuoi dire 'git stash'? – FaithReaper

21

sarà necessario prendere prima di aggiornare il tuo origine locale/master

git fetch origin 

Quindi puoi fare:

git diff --name-only origin/master 

Elencherà i file che sono stati modificati.

git diff origin/master directory_foo/file_bar.m 

Elencherà la riga per riga diff del file directory_foo/file_bar.m.

+0

Grazie per il suggerimento con il flag --name-only – cw24

2

Dal momento che il pull implica la fusione, andrei con l'esecuzione di git merge --abort se il tuo script rileva che ci sono stati conflitti e fusioni non riuscite.

+0

Se lo stavi facendo contro un ramo remoto (prima un 'git fetch origine branch') sarebbe' git merge --abort origin/branch' giusto? –

3
# fetch new commits from origin 
$ git fetch 

# check what are the differences and judge if safe to apply 
$ git diff origin/master 

# actually merge the fetched commits 
$ git pull 
+0

Perché il downvote? Ho fatto un 'git diff this-answer/top-answer' e non sono stati trovati errori significativi. Per favore, considera di lasciare un commento quando commetti un downvote: 'git commit -m ', perché dovresti downvotare, blah blah blah" ". – FaithReaper