Rozwidliłem repozytorium na Githubie. Dokonałem kilku drobnych zmian i przesłałem żądania ściągnięcia do głównego źródła, ale po drodze mój fork stał się tak zniekształcony, że nie mogę generować czystych żądań ściągnięcia; kiedy zaczynam żądanie ściągnięcia z gałęzi z sześcioma zmianami, Github chce przesłać trzynaście, z których siedem już istnieje (natch).
Wydaje się, że mój problem jest związany tylko z pobieraniem najnowszych zatwierdzeń , ale kiedy tworzę nową gałąź i najlepsze zatwierdzenia, nadal mam dodatki. Sfruzowałem również z rebasingiem , ale teraz wygląda na to, że nawet mój master jest tak pomieszany, że nie mogę wygenerować czystej kopii upstream . Najwyraźniej dzieje się tak, ponieważ nie rozumiałem, że muszę zmienić bazę zamiast scalać , więc najwyraźniej popełniłem błędy; to, co próbuję zrobić, to dowiedzieć się, jak rozwiązać ten węzeł i wrócić do czystego stanu, w którym mogę pożytecznie iść do przodu.
W pewnym sensie chcę zdmuchnąć swój widelec i zrobić nowy rozwidlenie górnego strumienia, ale myślę, że to też jest trudne.
Po wyznaniu grzechów w Git, jak uzyskać rozgrzeszenie na githubie?
Odpowiedzi:
Krok 1: Wyciągnij zmiany w górę
Zaleca się, aby dodać repozytorium nadrzędne jako „nadrzędne”, jak wyjaśniono na stronie Fork a Repo :
Ta
--rebase
opcja umieszcza zmiany na najnowszym zatwierdzeniu bez scalania.Krok 2: (Opcjonalnie) Połącz swoje zatwierdzenia w 1 zatwierdzenie
To polecenie „cofnie” wszystkie Twoje zatwierdzenia, ale nie zmieni plików. Możesz więc zatwierdzić wszystkie swoje zmiany w jednym zatwierdzeniu.
Krok 3: Sprawdź i przetestuj zmiany
Aby pokazać zmiany, użyj GUI, takiego jak wbudowany
gitk
, Sourcetree , TortoiseGit lub Tower (płatny) itp.Krok 4: Naciśnij
git push
zgłosi błąd, ponieważ wypychanie zmieniłoby historię repozytorium docelowego.Jeśli masz pewność, że zmiany pokazane w kroku 3 są poprawne, naciśnij przycisk „-f”
Informacje dodatkowe
Polecenie dodania pilota to:
Możesz także pobrać z bezpośredniego adresu URL:
Ale wtedy będziesz potrzebować skrótu najnowszego zatwierdzenia typu upstream zamiast „upstream / master” w innych krokach.
źródło
Jak rozumiem, zarówno w przypadku Gita, jak i Mercuriala (używałem tylko tego drugiego, więc mogę się mylić) nie jest w ogóle wielka sprawa, aby zdmuchnąć fork i ponownie go rozwidlić. Robię to cały czas z moimi projektami. Jeśli nie przeszkadza Ci to (możesz wykonać kopię zapasową zmian lub nie masz żadnych znaczących zmian w swoim widelcu), powiedziałbym, że prawdopodobnie jest to właściwy sposób.
Pamiętaj, że w DVCS rozwidlenie repozytorium tworzy pełny klon całego repozytorium . Jeśli usuniesz swój obecny fork, a następnie ponownie rozwiniesz oryginalne repozytorium, będziesz mieć całkowicie czystą kartę do pracy.
źródło
git format-patch
najpierw zatwierdzeń, które chcę zapisać.git format-patch
do zapisywania pracy jest czymś w rodzaju pomijania wszystkich przydatnych narzędzi, które git ma do zarządzania gałęziami. W przyszłości użyciegit rebase -i
do wybiórczego przepisywania zatwierdzeń na górze nowejmaster
gałęzi upstream jest właściwą rzeczą do zrobienia.W swoim prywatnym repozytorium dodaj repozytorium forkee jako pilot. Zrestartuj / zresetuj swoje oddziały z oddziałów pilota. Wypchnij na siłę do repozytorium na githubie.
Jeśli potrzebujesz dokładnych poleceń, daj mi znać. Daj mi również znać, czy chcesz spróbować zachować lokalne zatwierdzenia, czy też „zdmuchnięcie” jest w porządku.
źródło