Github dodaje repozytorium jako rozwidlenie z istniejącego klonu

21

Mam więc repozytorium git, które sklonowałem ze źródła na ghithub. Wprowadziłem do niego kilka zmian (niezaangażowanych i w gałęzi master). Chcę przesunąć moje zmiany na moją stronę github jako nową gałąź i sprawić, by github nadal widział to jako widelec.

Czy to jest możliwe? Jestem całkiem nowy w Git i Github. Czy moje pytanie w ogóle miało sens?

Najłatwiejszym sposobem, jaki mogę wymyślić (z pewnością jestem najbardziej zbliżony), jest rozwidlenie repo na github. Klonuj go lokalnie do innego katalogu. Dodaj repozytorium początkowe. Utwórz gałąź w tym nowym rozwidlonym repozytorium. Skopiuj ręcznie moje zmiany kodu do nowego lokalnego repozytorium. A potem popchnij to z powrotem do mojego githuba.

Czy jest to powszechny przypadek użycia, w którym istnieje prostszy sposób na zrobienie tego bez powielania katalogów?

Chyba pytam tutaj w przeciwieństwie do SO, ponieważ korzystam z Linuksa, używając git z linii poleceń, a ludzie tutaj dają lepsze odpowiedzi imo =]

Falmarri
źródło
Wydaje mi się, że jest to technicznie tematyczne, ale mogłoby być lepiej gdzie indziej, ponieważ wydaje się, że jest to głównie pytanie github
Michael Mrozek

Odpowiedzi:

22

Możesz to wszystko zrobić z istniejącego repozytorium (nie trzeba klonować rozwidlenia do nowego (lokalnego) repozytorium, utworzyć oddział, skopiować zatwierdzenia / zmiany itp.).

  1. Przygotuj swoje zobowiązania do publikacji.

    Udoskonal wszystkie istniejące lokalne zatwierdzenia (np. Za pomocą git commit --amendi / lub git rebase --interactive).

    Zatwierdź dowolne niezatwierdzone zmiany, które chcesz opublikować (nie jestem pewien, czy chciałeś zasugerować, że masz pewne zatwierdzenia w lokalnym systemie głównym i niektóre niezatwierdzone zmiany lub tylko niektóre niezatwierdzone zmiany; nawiasem mówiąc, niezatwierdzone zmiany nie są „ gałąź ”, są one ściśle w twoim drzewie roboczym).

    Zmień nazwę swojego głównej gałęzi, aby nadać jej nazwę, którą chcesz utworzyć dla „nowej gałęzi”. Nie jest to absolutnie konieczne (możesz przepchnąć z dowolnej gałęzi do dowolnej innej gałęzi), ale prawdopodobnie zmniejszy to zamieszanie na dłuższą metę, jeśli lokalna gałąź i gałąź w rozwidleniu GitHub mają tę samą nazwę.

    git branch -m master my-feature
    
  2. Rozwidlaj poprzednie repozytorium GitHub
    (np.) github.com:UpstreamOwner/repostory_name.gitJako
    (np github.com:YourUser/repository_name.git. ) .

    Odbywa się to na stronie internetowej GitHub (lub „kliencie” korzystającym z interfejsów API GitHub), nie są w to zaangażowane żadne lokalne polecenia Git.

  3. W twoim lokalnym repozytorium (tym, które zostało pierwotnie sklonowane z wcześniejszego repozytorium GitHub i ma twoje zmiany w swoim głównym systemie), dodaj repozytorium wideł jako zdalne:

    git remote add -f github github.com:YourUser/repository_name.git
    
  4. Wciśnij gałąź do repozytorium wideł na GitHub.

    git push github my-feature
    
  5. Opcjonalnie zmień nazwę pilotów, aby widelec był znany jako „origin”, a upstream jako „upstream”.

    git remote rename origin upstream
    git remote rename github origin
    

    Jednym z powodów zmiany nazwy pilotów jest to, że chcesz mieć możliwość korzystania z nich git pushbez określania repozytorium (domyślnie jest to „origin”).

Chris Johnsen
źródło
Działa bezbłędnie, ale kiedy tworzysz zdalny github, myślę, że brakuje ci „https: //” w adresie URL Github
jesjimher
1
@jesjimher: „Adresy URL” w tym poście wykorzystują „składnię podobną do scp”, która używa SSH, a nie HTTP (S). Musisz także zmienić dwukropek na ukośnik, aby użyć ich jako adresów URL HTTP (S) (zakładając, że serwer obsługuje oba bez dodatkowych zmian przestrzeni nazw, co robi GitHub).
Chris Johnsen
Ups, masz rację, Chris, błędnie wpisałem dwukropek jako ukośnik, a więc nie zadziałało, chyba że dodałem „https”. Przepraszam za hałas ...
jesjimher
W kroku 4 użycie -uopcji może sprawić, że lokalny oddział będzie my-feature śledził ten sam oddział zdalny origin/my-feature. Polecenie to:git push -u github my-feature
YaOzI
To wspaniale. Jedyne, co musiałem zmienić, to adres github!
Tico
0

Istnieje narzędzie: hub

hubto narzędzie wiersza poleceń, które można łączyć gitw celu rozszerzenia o dodatkowe funkcje i polecenia, które ułatwiają pracę z GitHub

Teraz możesz:

# cd to a cloned repo with uncommited changes
git checkout -b feature
git commit -am 'done with feature'
git fork
git push YOUR_USER feature
# git pull-request
Evgeny Vereshchagin
źródło