2009-08-18 1 views
32

Sto usando Git per tracciare la mia fonte di documentazione in lattice. Voglio mantenere il master branch pieno di documenti adatti per la release dell'utente finale, quindi quando qualcuno ha bisogno di qualcosa, posso semplicemente passare al master branch, compilare e distribuire il documento.Git: Unisci al master mentre si sceglie automaticamente di sovrascrivere i file master con il ramo

Faccio nuovi rami quando un manuale ha bisogno di un aggiornamento importante. Tuttavia, una volta approvato il manuale, è necessario ricollegarlo al master. Quando la fusione da ramo in maestro, vorrei passare un po 'di comando per Git a dire, "dimentica la fusione, basta utilizzare il file da ramo sovrascrivere il file in maestro." C'è un modo per fare questo? Nello specifico, voglio evitare di aprire ogni volta uno strumento di unione. Grazie in anticipo.

+0

È possibile eseguire un'unione interattiva e alimentarlo con il cucchiaio (con 'sì') qualunque sia la risposta quando chiede cosa fare ... –

+1

@ r-martinho-fernandes: che cos'è il comando di unione interattiva? –

risposta

46

Per ignorare master, quando si dispone di branch verificato poi:

git merge master --strategy=ours 

http://schacon.github.com/git/git-merge.html

come 'Linguista Computer' ha commentato qui, questo sarà "ignora tutto, dai 'master', anche se ha cambia in nuovi file indipendenti ". Quindi, se non sei l'OP e vuoi un'unione più sicura che non sia come l'OP dice "dimentica la fusione", quindi usa questo eccellente comando di sicurezza da "Linguista informatico", oltre al suo commento in modo da ottenere credenziali.

git merge -s recursive -X theirs branch 
+1

Da qui: http://stackoverflow.com/questions/366860/when-would-you-use-the-different-git-merge-strategies, questo dice: I nostri == Voglio tirare in un'altra testa, ma buttare via tutti i cambiamenti che la testa introduce. Quindi è l'opposto di ciò che l'OP voleva. – Amala

+4

Se sei in una diramazione e tu "git unisci master --strategy = ours'" allora mantiene le modifiche del ramo. (cosa OP vuole) Ma se sei in master e usa "il nostro" allora mantiene il master. (di fronte) – Robert

+4

Dalla mia lettura della domanda, Mica vuole unire il ramo in master, mantenendo lo stato del ramo cioè "git merge branch" sul master, quindi --strategy = il nostro è l'opposto di quello che vuole –

1

Io credo che si può fare questo con la strategia di unire il 'nostro':

git checkout branch 
git merge -s ours master 

Ma questo non fa esattamente quello che vuoi: è ignorare il contenuto della corrente ramo di lavoro branch e quello che vuoi è ottenere lo stesso contenuto su master. Quello che vuoi veramente è una strategia di fusione theirs, e per questo ti punto a this similar question per un modo per farlo. In pratica, ciò a cui si riduce è il ripristino di master in modo che punti a branch.

13

Nella versione 1.7.1 di Git, è possibile utilizzare "-Xtheirs" per unire il ramo stesso.

Ad esempio, se si avvia nel vostro branch master, a partire dal maestro

git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git merge -Xtheirs editBranch

Un altro modo che ho visto fare questo in base al largo this post è quello di fare un hard reset fuori dal editBranch . Per esempio:

git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git reset --hard editBranch

penso che questa seconda strada potrebbe essere il gioco migliore, ma non ho avuto la possibilità di giocare con essa ancora abbastanza.

+0

grazie. Dovrò aggiornare git a casa e verificarlo. Molto apprezzato. – Mica