Come testare un'unione senza prima fondersi effettivamente


Risposte:


132

Non credo che ci sia un modo per simulare ciò che accadrà finché non proverai l'unione. Tuttavia, se ti assicuri che l'output di git statussia vuoto prima di eseguire l'unione, è abbastanza sicuro andare avanti e provarlo. In caso di conflitti, puoi immediatamente tornare allo stato in cui ti trovavi prima con:

git reset --merge

Da git 1.7.4, puoi anche interrompere l'unione facendo:

git merge --abort

(Come spiega il messaggio di commit che ha aggiunto tale opzione , questo è stato aggiunto per coerenza con git rebase --aborte così via.)


4
@La risposta di Amber sta rispondendo esattamente a ciò che viene chiesto 'come simulare l'unione'. usare --no-commitè molto più facile secondo me
samirahmed

14
@samirahmed: @Amber ha risposto alla domanda in modo più letterale, certo, anche se con --no-commitstai ancora cambiando l'indice e l'albero di lavoro, che non è esattamente "senza apportare modifiche" :) Il mio punto è che quando le persone chiedono questo tipo di domanda, è generalmente perché non sono consapevoli del fatto che il modo migliore per vedere come andrebbe un'unione è semplicemente provare l'unione , spesso perché non sono consapevoli di quanto sia facile tornare allo stato in cui si trovavano prima se ci fossero problemi.
Mark Longair,

2
Non so se sia stato aggiunto in una versione più recente di git, ma nei documenti (1.8.4) afferma " git merge --abortequivale a git reset --mergequando MERGE_HEADè presente", quindi qualunque cosa sia più facile da ricordare :)
Samuel Meacham

@SamuelMeacham: grazie per averlo sottolineato - è stato introdotto in 1.7.4. Ho aggiornato la risposta con quello. Grazie!
Mark Longair l'

Questo suggerimento non ha fatto nulla per me, su git 1.9.4.
Djangofan,

137

Puoi usarlo git merge --no-commitper impedire che l'unione venga effettivamente commessa e se non ti piace come funziona l'unione, ripristina semplicemente la testa originale.

Se sicuramente non vuoi finalizzare l'unione, anche se si tratta di un avanzamento veloce (e quindi non ha conflitti, per definizione), puoi anche aggiungere --no-ff.


Non penso che git merge --abortesista - forse intendi git reset --merge?
Mark Longair,

Nah, ho appena dimenticato che, a differenza del fatto che rebasenon esiste un --abortfor git merge.
Ambra

7
Vorrei continuare anche io --no-ff. Per evitare che si verifichi una fusione ff.
Andy,

1
@ Andy --no-ffè praticamente obbligatorio qui, in quanto --no-commitnon blocca le modifiche di avanzamento rapido.
jackr,

1
@Anant Anand Gupta - questo è un buon trucco ma dovrebbe essere: git config --global alias.tm "merge --no-commit --no-ff"
pasx

109

Se voglio confrontare le modifiche su un ramo di argomento con il master, trovo che sia più semplice e sicuro eseguire le seguenti operazioni:

git checkout master
git checkout -b trial_merge
git merge topic_branch

Dopo aver completato l'unione, è facile vedere la modifica consolidata dal master

git diff master

Al termine, è sufficiente eliminare il ramo trial_merge

git checkout master
git branch -D trial_merge

In questo modo, il ramo master non cambia mai.


4
Puoi anche fare git checkout --detache testare tutto quello che vuoi. Più tardi, se vuoi mantenere le tue modifiche, fallo git checkout -b new_branch. E se vuoi buttare via le tue modifiche, controlla qualsiasi ramo tu voglia ( git checkout master).
Shayan Toqraee,

Se topic_branchè enorme (come probabilmente è il caso se si è in questa domanda in primo luogo) l' diff masteroutput è probabilmente troppo grande per farti vedere se una fusione causerà conflitti.
Crescent Fresh,

Mi piace decisamente molto ... sicuro e semplice.
leo

4

Io uso :

git merge --ff-only

secondo la documentazione :

Rifiuta di unire ed uscire con uno stato diverso da zero a meno che l'attuale HEAD non sia già aggiornato o l'unione non possa essere risolta come avanzamento rapido.

Non è davvero una simulazione perché ci sarà una fusione in avanti veloce in caso di conflitti tra i due rami. Ma in caso di conflitti, sarai informato e non succederà nulla.


4

Sono stato in grado di utilizzare git merge --abort, di recente. Tuttavia, questo può essere utilizzato solo in caso di conflitto di unione. Se sei sicuro di non voler impegnarti, usa gli altri metodi sopra menzionati.


1
Quali altri metodi sopra menzionati? Lo menzionano tutti git merge --abort. Dovresti provare in futuro la tua risposta specificando chi ha scritto la risposta a cui ti riferisci.
Michael Fulton,

3

Perché non creare semplicemente un ramo usa e getta (git checkout -b) e fare un test di fusione lì?


1
Quello che suggerisci in realtà è la risposta di Ian espressa in modo
conciso

0

Non so esattamente se è il tuo caso , ma la tua domanda mi ricorda che a volte avvio una funzione, mi impegno nel corso dei giorni e fondo lo sviluppo su di essa molte volte.

A questo punto perdo il controllo sugli esatti file che ho modificato e lo saprò solo quando la mia funzione sarà chiusa e il mio codice andrà a svilupparsi.

In questo caso, un buon modo per sapere quali modifiche hai fatto (non altre dalle fusioni) sta usando Sourcetree.

Devi fare clic con il tasto destro sul ramo base e selezionare Diff Against Current:

La caratteristica di Sourcetree per conoscere la differenza tra due rami

Quindi sourcetree ti mostrerà tutte le modifiche che verranno unite se unisci il tuo ramo nel ramo di base.

risultati

Certo, non ti mostrerà i conflitti, ma è uno strumento utile nelle fusioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.