2013-09-04 14 views
7

Czy istnieje sprytny przepływ pracy, aby utworzyć gałąź pull_request na widelcu, który jest rozbieżny z repozytorium, tak aby gałąź pull_request zawsze idealnie pasowała do "master" upstream?Całkowicie wymień Fork z origin (github)

Oznacza to,

1) Mam widełki, które różniły się znacznie w macierzystym pilocie zdalnego sterowania.

2) Chcę zachować moje widelec (nie ma sensu, aby go usunąć), ale chcę również czysto wydawać żądania ściągania, które są minimalnie rozbieżne z oryginalnego repozytorium.

Tak więc - czy istnieje sposób na stworzenie gałęzi w moim widelcu, która jest idealną repliką mistrza innego pilota?

+3

'git pull upstream master: upstream-master'? – Ryan

Odpowiedz

12

Po pierwsze, nie powinieneś modyfikować lokalnej gałęzi master, powinieneś tylko tworzyć gałęzie. Jeśli trzymać się z lokalnym master niemodyfikowana, można pobrać najnowsze zmiany z upstream repo:

git remote add upstream <url-for-upstream-repo> 
git fetch upstream 

Teraz pilot zdalnego śledzenia oddział upstream/master jest zsynchronizowany z najnowszymi zmianami z upstream. Opcjonalnie można również aktualizować swój lokalny master jeśli chcesz:

git checkout master 
git merge upstream/master 

Teraz można tworzyć oddziały funkcji off upstream/master:

git checkout -b feature upstream/master 

Gdy chcesz zsynchronizować oddziały funkcję przy użyciu najnowszych zmian od upstream, możesz użyć rebase, o ile nikt inny nie pracuje również nad gałęzią funkcji (w przeciwnym razie zmuszasz ich do ponownej synchronizacji ze zmienioną historią). rebase jest rzeczywiście idealnym miejscem dla tego przepływu pracy, ponieważ zazwyczaj można go używać do synchronizacji oddziały fabularnych tak często, jak chcesz, bez tworzenia niechlujny historię, ponieważ nie dopuszcza tworzenie korespondencji seryjnej:

git fetch upstream 
git checkout feature 
git rebase upstream/master 

Można też zamiast git merge upstream/master zmiany, ale pozostawisz zatwierdzenie scalenia, więc z czasem utworzysz bardziej skomplikowaną historię, scalając zamiast przekierowywania.

Gdy będziesz gotowy do wysłania żądania wyciągnięcia, po prostu naciśnij na swój numer origin i złóż wniosek przeciwko wcześniejszemu master.

Oryginalny plakat pyta:

[I] s istnieje sposób, aby utworzyć oddział w moim widelca, który jest doskonały replika mistrza innego pilota?

tak długo, jak miejscowy master nie odbiegał od upstream/master (co nie powinno, jeśli już robi swoją pracę w oddziałach fabularnych zamiast bezpośrednio w master), a potem po prostu push lokalny master do listy origin:

git push origin master 

Alternatywnie, można użyć refspec do pchania zdalnego śledzenia oddział upstream/master do origin/master:

git push origin upstream/master:master 
+0

To jest najlepszy argument, jaki słyszałem o używaniu gałęzi do wszystkiego / – jayunit100