MODIFICARE:
La mia risposta di seguito documenta un modo in cui unire , master
in aq
cui se si visualizzano i dettagli della fusione, vengono elencate le modifiche apportate aq
prima della fusione, non le modifiche apportate master
. Ho capito che probabilmente non è quello che vuoi, anche se pensi che lo sia!
Appena:
git checkout aq
git merge master
è ok.
Sì, questa semplice unione mostrerà che le modifiche da master
sono state apportate aq
a quel punto, non viceversa; ma va bene - dato che è quello che è successo! Più tardi, quando finalmente unisci il tuo ramo master
, è allora che una fusione mostrerà finalmente tutte le modifiche apportate master
(che è esattamente quello che vuoi, ed è l'impegno in cui le persone si aspetteranno di trovare comunque quelle informazioni).
Ho controllato e anche l'approccio seguente mostra esattamente le stesse modifiche (tutte le modifiche apportate aq
dopo la divisione originale tra aq
e master
) dell'approccio normale sopra, quando alla fine si fondono nuovamente tutti gli elementi master
. Quindi penso che il suo unico vero svantaggio (oltre ad essere troppo complesso e non standard ...: - /) è che se si riavvolgono n recenti cambiamenti git reset --hard HEAD~<n>
e questo va oltre l'unione, allora la versione seguente torna indietro ramo "sbagliato", che devi correggere manualmente (ad es. con git reflog
& git reset --hard [sha]
).
[Quindi, quello che precedentemente pensavo fosse:]
Si è verificato un problema con:
git checkout aq
git merge master
perché le modifiche mostrate nel commit di merge (ad esempio se guardi ora o più tardi in Github, Bitbucket o il tuo visualizzatore di cronologia git locale preferito) sono le modifiche apportate sul master, che potrebbe non essere quello che desideri.
D'altro canto
git checkout master
git merge aq
mostra le modifiche apportate in aq, che probabilmente è quello che vuoi. (O almeno, è spesso quello che voglio!) Ma l'unione che mostra i cambiamenti giusti è nel ramo sbagliato!
Come far fronte ?!
Il processo completo, che termina con un commit di unione che mostra le modifiche apportate su aq (come per la seconda unione di cui sopra), ma con l'unione che influenza il ramo di aq, è:
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq
Questo: fonde aq su master, fa avanzare rapidamente la stessa unione su aq, lo annulla su master e ti riporta di nuovo su aq!
Sento che mi sto perdendo qualcosa - questo sembra essere qualcosa che ovviamente vorresti, e qualcosa che è difficile da fare.
Inoltre, rebase NON è equivalente. Perde i timestamp e l'identità dei commit effettuati su aq, che non è anche quello che voglio.