Per unire il ramo corrente in un altro ramo senza estrarre l'altro ramo:
Unione rapida
Questo è davvero facile. Per definizione, una fusione in avanti veloce significa semplicemente che il puntatore del ramo viene spostato avanti nella struttura di commit. Quindi tutto ciò che devi fare è solo simulare che:
git branch -f master dev
Avvertenze: questo presuppone che masterpunti a un commit che è anche in devbranch o in qualche altro branch. In caso contrario, rischi di perdere il lavoro! Diversamente da git mergeciò creerà un commit di unione (o lamentarsi) quando non è possibile avanzare rapidamente, questo metodo forza silenziosamente il puntatore del ramo a puntare a un altro commit.
Questo presuppone anche che tu sia l'unico a lavorare sul repository e / o tu sappia cosa stai facendo.
Suggerimento: se hai fatto un git fetche hai nuovi commit origin/master, puoi spostare la masterfiliale senza effettuare il checkout utilizzando:
git branch -f master origin/master
Unisci tramite unisci unione
Questo non è sempre possibile. Per creare un commit di unione, è necessario eseguire un'operazione di unione. E per eseguire un'operazione di unione, è necessario eseguire commit nell'altro ramo che non si trova nel ramo corrente.
Se hai commesso in master filiale sono che non sono nella devbranch, è possibile:
Disclaimer: questa è solo una prova di concetto, solo per dimostrare che a volte è possibile fare una fusione con l'altra filiale senza effettuare il check-out. Se vuoi usarlo ogni giorno, probabilmente vorrai creare un alias usando il reindirizzamento della shell o creare uno script di shell per esso. Quindi, puoi anche creare uno script di shell per il processo più breve mostrato nella domanda.
git checkout -b temp
git merge --no-ff -e master
git branch -f master temp
git checkout dev
git branch -D temp
Spiegazione:
- Controlla un ramo temporaneo che punta allo stesso commit del ramo corrente.
Unisci masternel ramo temporaneo e avvia l'editor dei messaggi di commit. Se si desidera che il commit della fusione assomigli hai unito il devramo in master, modificalo da questo:
Merge branch 'master' into temp
a questa:
Merge branch 'dev'
Mancia: puoi usare -m "Merge branch 'dev'"invece di -eessere più veloce.
- Aggiorna il
masterpuntatore del ramo in modo che punti al commit di unione.
- Dai un'occhiata alla
devfiliale.
- Forza l'eliminazione del ramo temporaneo.
Questo tocca ancora l'albero di lavoro, ma minimamente. Non esegue il rollback dell'albero fino allo stato originale mastersolo per apportare nuovamente i cambiamenti di sviluppo. Ad alcuni potrebbe non interessare, ma per altri potrebbe essere importante.