2013-03-04 15 views
10

Jeśli wykonuję pobieranie git z repo A na B, gałąź główna w B nie zmienia się - zmienia się tylko remotes/origin/master, a git status przypomina mi o tym.Co byłoby przeciwieństwem "git fetch"?

Ale teraz chcę zrobić odwrotnie - zaktualizować B z A, coś jak przesuwanie z A:master do B:remotes/origin/master. Powodem tego jest to, że ta aktualizacja odbywa się przez ssh, a maszyna A posiada autoryzację klucza publicznego do maszyny B - ale nie odwrotnie.

Jak mogę to zrobić?

+0

bardzo związany [ „git push” robi to samo co „git fetch” z pilota] (http://stackoverflow.com/q/4239064/11343) – CharlesB

Odpowiedz

9

git fetch A, uruchom z B, przechowa wszystkie bieżące oddziały A w refs/remotes/A. Ponieważ możesz zrobić prawie wszystko z refspecs, można zrobić to samo dla git push, ale uruchom z A i kieruj na B.

Refspec składa się z dwóch części oddzielonych średnikiem. W pierwszej części wybierasz, co chcesz nacisnąć. Tutaj chcesz wszystkie obecne gałęzie, więc jest to refs/heads/*.

Druga część to miejsce, w którym będziesz przechowywać je na pilocie; tutaj chcesz je przechowywać pod remotes/A/*, więc jest to refs/remotes/A/*.

umieścić go razem, aby przesunąć wszystkie lokalne oddziały do ​​odpowiednich zdalnych oddziałów z tym poleceniem:

git push --force B refs/heads/*:refs/remotes/A/* 
Powiązane problemy