2013-04-23 5 views
28

Ho due rami. Staging e Beta. Staging ha il codice in esso (inclusi i file), che non voglio affatto. Come posso fare in modo che la Beta sovrascriva completamente la gestione temporanea, in modo che nessuno di questi file o codice venga unito da Staging in Beta.Come posso sovrascrivere, non unire, un ramo remoto in un altro ramo?

vedo alcune persone consigliamo di fare questo:

git checkout staging 
git merge -s ours beta 

Ma io non credo che il file preesistenti sarebbe un "conflitto di codice" e quindi non sarebbe stato rimosso. Ho sbagliato? Se ho ragione, come potrei realizzare questo?

+0

'staging' avanti da' beta'? Qual è esattamente la relazione tra i tuoi due rami? – Rerito

+0

Entrambi hanno alcuni dati in anticipo. Ma non voglio nulla su Staging. – Trip

risposta

29

È possibile semplice eliminare staging e ricrearlo sulla base di beta:

git branch -D staging 
git checkout beta 
git branch staging 
+1

Ho pensato anche a questo, ma non abbiamo abbastanza informazioni sui rami. Presumo che l'OP non avrebbe posto questa domanda se avesse solo dovuto rimuovere il suo ramo – Rerito

+0

@Rerito: non sono d'accordo. A volte le persone semplicemente non vedono la soluzione semplice. –

+0

Rimuovere il ramo distruggerebbe la sua storia però? – Trip

8

vi suggerisco di rinominarlo nel caso in cui si cambia idea.

git branch -m staging staging_oops 
git checkout beta 
git branch staging 

Se davvero non può stare avendo quel ramo in più intorno:

git branch -D staging_oops 
22

Se non vi interessa circa la vecchia storia del staging, si può semplicemente ricrearlo:

git checkout beta 
git branch -f staging 

Se si cura circa la vecchia storia del staging, quindi cosa s get più divertente:

git checkout staging  # First, merge beta into staging so we have 
git merge -s theirs beta # a merge commit to work with. 

git checkout beta   # Then, flip back to beta's version of the files 

git reset --soft staging # Then we go back to the merge commit SHA, but keep 
          # the actual files and index as they were in beta 

git commit --amend   # Finally, update the merge commit to match the 
          # files and index as they were in beta. 
+0

Questo eliminerebbe i file indesiderati che sono stati recentemente creati su Staging? – Trip

+0

@Trip Poiché reimposta l'indice esattamente su ciò che era in 'beta', tutto ciò che non era in beta dovrebbe essere eliminato per quanto riguarda Git. – Amber

+2

Sfortunatamente 'git merge -s theirs' non è disponibile nelle versioni più recenti di Git, quindi non funzionerà esattamente come scritto. – James

0

Se la storia della messa in scena non sta per essere un problema, si può semplicemente fare questo.

git checkout staging 
git reset --hard beta 

Basta ricordare la storia della messa in scena sarà andato dopo il comando sopra e messa in scena avrà il lavoro del vostro beta ramo.