2012-04-05 21 views
6

Ecco lo scenario. Ho creato un ramo "dev" dal ramo "master" e fatto alcuni nuovi commit. Alcuni di questi cambiamenti saranno rilevanti solo per la mia macchina di sviluppo locale. Ad esempio, ho modificato una variabile URL per puntare a un server Apache locale anziché l'URL reale pubblicato online (l'ho fatto per la velocità durante la fase di test). Ora vorrei incorporare le mie modifiche dal ramo dev al ramo master ma NON quelle modifiche che hanno senso solo nel mio ambiente locale.Come unire rami in Git da "hunk"

Avevo immaginato qualcosa di simile a un merge --patch che mi avrebbe permesso di scegliere le modifiche che voglio unire linea per linea.

In alternativa, potrei verificare il ramo "master", ma mantenere i file nella mia directory di lavoro come fossero nel ramo "dev", quindi fare un git add --patch. Funzionerebbe?

risposta

2

Forse potresti provare qualcosa del genere?

git merge --squash --no-commit $YOUR_OTHER_BRANCH 
git reset HEAD 
git add -p 
git commit 
+0

nota che --squash implica --no-commit, a partire dall'ultimo git comunque – CharlesB

6

Un approccio potrebbe essere quello di unire le modifiche da l'altro ramo, ma rimuovere il contenuto specifico di sviluppo prima di commettere l'unione.

Innanzitutto, ottenere le modifiche, senza commetterle con git merge --no-ff --no-commit dev.

Rimuovere le modifiche specifiche dello sviluppo modificando i file interessati e git add oppure i file interessati e git add --patch le parti che si desidera.

Quindi confermare l'unione. Un vantaggio di fare un merge commit è che le future fusioni saranno indolore. Poiché i commit specifici dello sviluppo sono considerati unificati, le future fusioni che non coinvolgono pezzi specifici dello sviluppo possono essere eseguite con un semplice git merge dev. In questo modo è possibile mantenere a tempo indeterminato un ramo separato con la propria configurazione, pur incorporando senza problemi le modifiche nel ramo principale.

+0

Questo non sembra funzionare. Ho tryped git merge --no-commit dev e sono tornato: "Aggiornamento 91a6696..056b567 Avanzamento veloce". Allora ho digitato git reset HEAD e git add --patch e dice "no changes". – asolberg

+0

Ah, scusami, non ho previsto una fusione veloce. Prova con il comando aggiornato che include '--no-ff'. Ciò dovrebbe forzare la creazione del commit di unione, sebbene non venga effettivamente eseguito. – blahdiblah