Z tego często korzystam:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
Należy pamiętać, że jest to dobra praktyka, aby nie wprowadzać zmian do lokalnego master / rozwinąć gałąź, ale zamiast tego utworu do innego oddziału wszelkich zmian, z nazwą oddziału poprzedzany przez rodzaj zmian, na przykład feat/
, chore/
, fix/
, itd. W ten sposób tylko trzeba ściągaj zmiany, a nie wypychaj żadnych zmian z mastera. To samo dotyczy innych gałęzi, do których przyczyniają się inni. Dlatego powyższego należy używać tylko wtedy, gdy zdarzyło się, że dokonałeś zmian w gałęzi, do których inni się zobowiązali i musisz je zresetować. W przeciwnym razie w przyszłości unikaj wypychania do gałęzi, do której inni pchają, zamiast realizacji transakcji i wypychania do tej gałęzi za pośrednictwem wypisanej gałęzi.
Jeśli chcesz zresetować swój oddział lokalny do najnowszego zatwierdzenia w gałęzi upstream, do tej pory działa dla mnie:
Sprawdź swoje piloty, upewnij się, że twój upstream i pochodzenie są zgodne z oczekiwaniami, jeśli nie zgodnie z oczekiwaniami, skorzystaj git remote add upstream <insert URL>
np. Z oryginalnego repozytorium GitHub, z którego rozwidliłeś się i / lub git remote add origin <insert URL of the forked GitHub repo>
.
git remote --verbose
git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force
Na GitHub możesz również pobrać gałąź o tej samej nazwie co lokalna, aby zapisać tam pracę, chociaż nie jest to konieczne, jeśli program develop origin ma takie same zmiany jak lokalna gałąź zapisanej pracy. Korzystam z gałęzi programistycznej jako przykładu, ale może to być dowolna istniejąca nazwa gałęzi.
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
Następnie, jeśli chcesz scalić te zmiany z inną gałęzią, w której występują konflikty, zachowując zmiany w rozwoju, użyj:
git merge -s recursive -X theirs develop
Podczas użytkowania
git merge -s recursive -X ours develop
aby zachować sprzeczne zmiany w nazwie gałęzi. W przeciwnym razie użyj narzędzia do łączenia z git mergetool
.
Wszystkie zmiany razem:
git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;
Zauważ, że zamiast upstream / develop możesz użyć skrótu zatwierdzenia, innej nazwy oddziału itp. Użyj narzędzia CLI, takiego jak Oh My Zsh, aby sprawdzić, czy twoja gałąź jest zielona, wskazując, że nie ma nic do zatwierdzenia, a katalog roboczy jest czysty ( co zostało potwierdzone lub może zostać zweryfikowane przez git status
). Należy pamiętać, że może to faktycznie dodać zobowiązuje porównaniu do początkowych rozwijać, czy jest coś dodawane automatycznie przez commit np diagramy UML, nagłówki licencyjne, itd., A więc w tym przypadku, można wtedy wyciągnąć zmiany na origin develop
celu upstream develop
, w razie potrzeby.
git status
drugiego poleceniagit reset --hard HEAD
nie powiodło się. Jednak nie wkleiłeś danych wyjściowych. → Niekompletne pytanie.