Esiste un modo per simulare un git merge
tra due rami, l'attuale ramo di lavoro e il master, ma senza apportare modifiche?
Spesso ho conflitti quando devo fare un git merge
. Esiste un modo per simulare prima l'unione?
Esiste un modo per simulare un git merge
tra due rami, l'attuale ramo di lavoro e il master, ma senza apportare modifiche?
Spesso ho conflitti quando devo fare un git merge
. Esiste un modo per simulare prima l'unione?
Risposte:
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 status
sia 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 --abort
e così via.)
--no-commit
è molto più facile secondo me
--no-commit
stai 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.
git merge --abort
equivale a git reset --merge
quando MERGE_HEAD
è presente", quindi qualunque cosa sia più facile da ricordare :)
Puoi usarlo git merge --no-commit
per 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
.
git merge --abort
esista - forse intendi git reset --merge
?
rebase
non esiste un --abort
for git merge
.
--no-ff
. Per evitare che si verifichi una fusione ff.
--no-ff
è praticamente obbligatorio qui, in quanto --no-commit
non blocca le modifiche di avanzamento rapido.
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.
git checkout --detach
e 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
).
topic_branch
è enorme (come probabilmente è il caso se si è in questa domanda in primo luogo) l' diff master
output è probabilmente troppo grande per farti vedere se una fusione causerà conflitti.
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.
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.
git merge --abort
. Dovresti provare in futuro la tua risposta specificando chi ha scritto la risposta a cui ti riferisci.
Perché non creare semplicemente un ramo usa e getta (git checkout -b) e fare un test di fusione lì?
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
:
Quindi sourcetree ti mostrerà tutte le modifiche che verranno unite se unisci il tuo ramo nel ramo di base.
Certo, non ti mostrerà i conflitti, ma è uno strumento utile nelle fusioni.