2012-10-21 23 views
26

Nigdy nie użyłem git przed GitHub opublikowałem aplikację dla systemu Windows, więc nigdy jej nie użyłem w linii poleceń.Jak przesłać wiele oddziałów z wielu zatwierdzeń?

Oto moja sytuacja:
Zrobiłem kilka commitów na master, potem zmieniłem gałąź i zrobiłem tam także pewne poprawki. Wszystko bez pchania do GitHub. Kiedy kliknąłem sync w aplikacji Windows (co do której zakładam, że jest git push), ku mojemu zaskoczeniu, wszystkie moje zatwierdzenia zostały przekazane do mojego nowego oddziału - nawet zatwierdzenia, które zrobiłem, gdy byłem w master.

Ponieważ jest to zachowanie aplikacji windows, myślę, że muszę użyć wiersza polecenia.
Co to jest poprawna komenda git push, aby przesunąć zatwierdzenia do właściwych gałęzi na pilocie?

Odpowiedz

47

Aby przesunąć wszystkie branże (odn pod bibl/głowic), należy użyć następującego polecenia (gdzie pochodzenie jest pilot):

git push origin --all 

Można również ustawić push.default do matching w config przesuwania wszystkie gałęzie o tej samej nazwie na obu końcach domyślnie. Na przykład:

git config --global push.default matching 

Ponieważ Git 2.0 domyślnie simple która jest najbezpieczniejsza opcja.

7

git push origin będzie domyślnie naciskać ze wszystkich gałęzi śledzenia do pilota.

git push origin my-new-branch popchnie tylko twój nowy oddział.

Nie sądzę, aby cokolwiek było prostego lub możliwego do wykonania przez przypadek, który spowodowałby wypychanie zatwierdzeń z dwóch różnych gałęzi do tej samej gałęzi i wykonanie scalenia na pilocie.

Przypuszczam, że nowy oddział miał zatwierdzenia od mistrza w swojej historii. Aby sprawdzić, czy to prawda, uruchom lokalnie git log my-new-branch i zobacz, czy te zatwierdzenia były w Twojej historii.

Jeśli tak, to po "przełączeniu oddziałów" najprawdopodobniej rozgałęziono się po master po nowe zatwierdzenia zostały wykonane, więc nowy oddział miał wszystkie zatwierdzenia w historii, nie tylko te, które są unikalne dla tej gałęzi.

+1

Nie jestem pewien co do twojej ostatniej sugestii, powiedziałbym, że polecenie jest po prostu 'git push origin branchOne anotherBranch' – Drealmer

+2

Myślę, że nowsze wersje gita nie przesyłają wszystkich gałęzi śledzenia: http://stackoverflow.com/ a/13148313/586086 –

4

Późna odpowiedź, ale podzielę się moim rozwiązaniem, które sprawdziło się u mnie.

Wreszcie mój plik /foo/.git/config wygląda następująco:

[core] 
    ... 

[remote "dev"] 
    url = http://dev.foobar.com/foo.git 
    fetch = +refs/heads/*:refs/remotes/dev/* 
[remote "pro"] 
    url = http://pro.foobar.com/foo.git 
    fetch = +refs/heads/*:refs/remotes/pro/* 

[remote "all"] 
    url = http://dev.foobar.com/foo.git 
    url = http://pro.foobar.com/foo.git 

[http] 
    postBuffer = 524288000 

i polecenia;

git push all --all 

Kredyty: Pushing to Multiple Git Repositories Simultaneously

+0

Dlaczego masz 'url' dwa razy pod' [remote "all"] '? – MiniGod

+0

To był literówka, zredagowany. Tnx! –

13

Jeśli chcesz przesunąć kilka konkretnych oddziałów (np branch1 i Branch2) można użyć:

git push origin branch1 branch2 

W Git> = 2,4 Operacja ta może zrobić to atomowo (tzn. jeśli nie powiedzie się naciśnięcie którejś z wymienionych gałęzi nic nie zostanie pchnięte):

git push --atomic origin branch1 branch2 
+0

To nie działa. Pcha tylko do branch1 – Adnan

Powiązane problemy