Jestem ciekawy, jak usunąć pierwszy commit w git.
Jaka jest rewizja przed popełnieniem jakiejkolwiek rzeczy? Czy ta wersja ma nazwę lub tag?
git
repository
commit
git-commit
Jian Weihang
źródło
źródło
git rebase -i --root
. Zobacz następującą odpowiedź SO, aby uzyskać szczegółowe informacje: stackoverflow.com/questions/2246208/ ...git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
Odpowiedzi:
Dla mnie najbezpieczniejszym sposobem jest użycie
update-ref
polecenia:Usunie to odniesienie o nazwie
HEAD
, więc zresetuje (delikatnie, nie stracisz pracy) wszystkie twoje zatwierdzenia z twojej aktualnej gałęzi .Jeśli chcesz scalić pierwszy commit z drugim, możesz użyć
rebase
polecenia:Ostatnim sposobem może być utworzenie gałęzi osieroconej, gałęzi o tej samej zawartości, ale bez historii zmian, i zatwierdzenie nowej zawartości na niej:
źródło
Nie ma nic przed pierwszym zatwierdzeniem, ponieważ każde zatwierdzenie odnosi się do zatwierdzenia rodzica. To sprawia, że pierwsze zatwierdzenie jest wyjątkowe (zatwierdzenie osierocone), więc nie ma możliwości odniesienia się do poprzedniego „stanu”.
Więc jeśli chcesz naprawić zatwierdzenie, możesz po prostu
git commit --amend
: to zmodyfikuje zatwierdzenie bez tworzenia kolejnego.Jeśli chcesz zacząć wszystko od nowa, usuń
.git
repozytorium i utwórz kolejne zgit init
źródło
--amend
Również nie zaktualizuje autor prawidłowo jeśli początkowo skonfigurowana. To jest to, czego potrzebowałem, więc użyłem zaakceptowanej odpowiedzi, a następnie po prostu wykonałem nowy commit.źródło
Możesz po prostu edytować swoje pierwsze zatwierdzenie (ponieważ w repozytorium git zawsze jest pierwsze zatwierdzenie). Rozważ użycie
git commit --amend --reset-author
zamiast zwykłegogit commit --amend
.źródło
Szukałem sposobu na cofnięcie wszystkich zatwierdzeń git z repozytorium, jakby nigdy się nie wydarzyły.
Rebasing będzie działał do pewnego momentu. Jednak pierwsze (chronologicznie najstarsze zatwierdzenie git) zawsze będzie problematyczne, ponieważ nie ma elementu nadrzędnego, więc wystąpi błąd.
Żadna z tych odpowiedzi nie rozwiązała tego za mnie. Ale po wielu poszukiwaniach i próbach i błędach okazało się, że to działa!
Mam nadzieję, że to ci pomoże. Miłego dnia.
źródło
Możesz też:
git checkout dev
git branch -D master
git checkout --orphan master
Oczywiście wszystko to będzie zależeć od twojego przypadku, ale jeśli masz więcej niż jedną gałąź, usunięcie
.git
katalogu nie ma sensu.źródło
Jeśli chcesz zachować inne gałęzie, ale na przykład sprawić, by
master
gałąź zaczynała się od nowa bez wspólnej historii do innych gałęzi, jednym bezpiecznym sposobem na osiągnięcie tego jest utworzenie nowego repozytorium i wypchnięcie jego zawartości do starego:Spowoduje to
newmaster
utworzenie gałęzi w starym repozytorium, której historia nie jest wspólna dla żadnej z innych gałęzi. Oczywiście, można po prostu nadpisaćmaster
, jak również, zgit push -f
.Jeśli chcesz zniszczyć wszystkie gałęzie i całą istniejącą zawartość, po prostu uruchom
źródło
git rebase --root
jest to prawdopodobnie to, czego chciał OP, ale biorąc pod uwagę, że ta odpowiedź ma dwa głosy za, powstrzymam się od jej usuwania, jeśli ktoś nadal uzna ją za istotną.Jeśli właśnie go zatwierdziłeś, ale nie pchnąłeś, po prostu usuń katalog .git i
git init
jeszcze raz ...źródło
Odpowiedź na pytanie zależy od tego, czy:
Chcesz usunąć pierwsze I TYLKO zatwierdzenie na gałęzi (pozostawiając inne gałęzie bez zmian), czy też
Chcesz usunąć pierwsze zatwierdzenie w jakiejś gałęzi, pozostawiając „na miejscu” kolejne zatwierdzenia (i pozostałe gałęzie).
Drugi z nich jest stosunkowo prostszy. Zasadniczo musisz zmienić bazę na rootowanie - większość odpowiedzi tutaj dotyczy sposobów, aby to zrobić.
Wykonanie drugiej (usunięcie pierwszego i jedynego zatwierdzenia z gałęzi, a pozostawienie innych gałęzi w spokoju) jest trudniejsze. Lub przynajmniej szczególnie trudniej, jeśli chcesz, aby tak się stało i aby zmiana została odzwierciedlona z powrotem w GitHub lub Bitbucket. Nie ma (o ile wiem) w Gicie żadnego sposobu, aby wypchnąć lub wymusić wypchnięcie gałęzi bez zatwierdzeń. Nie ma również (znowu, o ile widzę) żadnego sposobu na utworzenie nowej, pustej gałęzi bez zatwierdzeń w GitHub lub Bitbucket. Więc zasadniczo musisz utworzyć nowe repozytorium, aby utworzyć całkowicie pustą gałąź, a następnie dodać z powrotem gałęzie, które chcesz (w tym zatwierdzenia, które chcesz) - zgodnie z odpowiedzią @ user1338062.
Więc mam nadzieję, że ta odpowiedź wyjaśnia, jakie mogą nie być oczywiste - że istnieją dwa różne podejścia, które muszą być podjęte, na dwóch różnych (mniej lub bardziej rozsądnych) scenariuszy, które są zarówno rzeczy, które warto być w stanie zrobić, aby w pełni opanować robienie tego, o co prosi PO.
źródło