Come rifare le modifiche del ramo corrente oltre alle modifiche che vengono unite?


144

Va bene. Se sono su un ramo (dire working) e voglio unirmi alle modifiche da un altro ramo (dire master), allora eseguo il comando git-merge mastermentre mi trovo sul workingramo e le modifiche vengono unite senza riordinare la cronologia. Se corro git-rebase master, le modifiche in mastervengono ridisegnate per essere messe in cima al mio workingramo. Ma cosa succede se voglio unirmi alle modifiche masterma rifare le mie modifiche workingper essere in cima? Come lo faccio? Si può fare?

Potrei correre git-rebase workingsul mio masterramo per mettere le mie modifiche in cima al masterramo, ma mi piacerebbe essere in grado di farlo nel mio workingramo e non ho idea di come. Il più vicino che mi viene in mente di fare è la creazione di un nuovo ramo mastere quindi workingil cambio delle modifiche, ma poi avrei un nuovo ramo invece di alterarlo working.

Risposte:


255

Hai quello che rebasefa al contrario. git rebase masterfa quello che stai chiedendo: prende le modifiche sul ramo corrente (dalla sua divergenza dal master) e le ripete sopra master, quindi imposta il capo del ramo corrente come capo di quella nuova storia. Essa non riprodurre i cambiamenti da masterin cima al ramo corrente.


3
@Jonathan è bello. Questo è un po 'un argomento difficile. A proposito, git rebase workingsposterebbe masteri cambiamenti (dopo il punto che si workingramificava) per essere in cima al workingramo - ma non è una cosa molto sensata da fare master:)
hobbs

66

Un altro modo di vederlo è considerare git rebase mastercome:

Rebase il ramo corrente sopra master

Qui ' master' è il ramo a monte , e questo spiega perché, durante un rebase, ourse theirssono invertiti .


Ciò spiega anche perché LOCAL e REMOTE sono invertiti. Grazie.
AVIDeveloper

@AVIDeveloper su locali e remoti, si può anche leggere stackoverflow.com/a/3052118/6309
VonC

5
@@ VonC: grazie. Sì, dopo aver trascorso un pomeriggio a borbottare tra me e me "REMOTO è il mio ramo ... LOCALE non è il mio", tutto è affondato. Onestamente, avrei preferito vedere i nomi dei rami (o abbrev. SHA) invece di REMOTO / LOCALE / nostro / loro / mio. I miei pensieri sono gli stessi per quanto riguarda l' git difftoolorribile sinistra / destra. Un po 'fuori tema, ma per quanto difftoolmi attiene a git-meld e mi piacciono i nomi come' working-dir ',' stash @ {0} ', e così via.
AVIDeveloper

1
@VonC: Puoi spiegare come può essere dopo che lo facciamo: git checkout branch_to_update git rebase masterottengo in git log i commit del master in cima al ramo locale, invece il contrario?
JavaSa,

1
@JavaSa È strano, a meno che il rebase non sia stato completato correttamente? Potrebbe essere necessario porre una domanda separata con ulteriori dettagli al suo interno.
VonC,
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.