Używam Gita od około roku i uważam, że to fantastyczne, ale właśnie zacząłem od drugiej wersji projektu i założyłem dla niego nową gałąź. Walczę trochę z najlepszym sposobem radzenia sobie z przyszłymi sprawami.
Mam dwie gałęzie o nazwie powiedz master10 (dla v1) i master20 (dla v2). Robiłem poprawki błędów w wersji 1 na gałęzi master10 i opracowywałem nowe rzeczy z master20. Ilekroć poprawiam błąd, łączę go z v2, sprawdzając master20 i robiąc to git merge master10
. Na razie w porządku.
Teraz jednak wprowadziłem zmianę w wersji 1, której nie chcę w wersji 2, ale chcę nadal scalać inne poprawki błędów. Jak mam powiedzieć Gitowi, aby pomijał ten konkretny zatwierdzenie (lub zakres zatwierdzeń), ale że dalej chcę scalić inne poprawki błędów.
Myślałem, że git rebase
może być tym, czego potrzebuję, ale przeczytałem dokument, a moja głowa prawie wybuchła.
Myślę, że to, czego chcę, to coś w rodzaju polecenia „git sync”, które mówi gitowi, że dwie gałęzie są teraz zsynchronizowane, aw przyszłości scalą tylko zatwierdzenia od tego punktu synchronizacji.
Każda pomoc doceniona.
źródło
IMHO, najbardziej logiczną rzeczą do zrobienia, jest scalenie wszystkiego, a następnie użycie git revert (commit_you_dont_want), aby go usunąć .
Przykład:
Jeśli masz wiele zatwierdzeń „zignoruj” lub chcesz edytować komunikat przywrócenia:
Twoja historia może wyglądać następująco:
Jeśli masz konflikty dotyczące TYLKO tych zatwierdzeń „zignoruj”, możesz użyć:
Twoja wersja pozostanie niezmienna w stosunku do drugiej. Nawet bez komunikatów o błędach możesz nadal „cofnąć” te niechciane zatwierdzenia, ponieważ mogą one zawierać inne zmiany, które nie spowodowały konfliktu, i nadal ich nie chcesz.
Jeśli masz konflikty obejmujące TYLKO zatwierdzenia „ignoruj”, powinieneś je rozwiązać ręcznie i prawdopodobnie będziesz musiał rozwiązać je ponownie podczas cofania.
źródło
Zatwierdzenia obejmują pochodzenie. Nie można scalić zatwierdzenia bez scalenia wcześniejszych zatwierdzeń.
Oczywiście możesz je wybrać. To drobny przepływ, gdy masz gałąź w trybie konserwacji.
źródło
Brzmi jak klasyczny przypadek „git cherry-pick” https://git-scm.com/docs/git-cherry-pick robi dokładnie tak, jak brzmi
źródło
Rodzaj reklamy mojego projektu, który zasadniczo otacza proces opisany przez @araqnid.
To rodzaj pomocnika, który wprowadza następujący przepływ GIT:
Cytat ze strony projektu:
źródło
Utwórz trzecią gałąź dla zmian, które chcesz w master10, ale nie w master20. Zawsze uważaj master10 za „master”, najbardziej stabilną gałąź ze wszystkich. Gałąź, z którą wszystkie inne gałęzie chcą się zawsze synchronizować.
źródło
Zamiast tego
revert
lubcherry-pick
w tym przypadku musisz poprosić gita, aby uznał zmiany, które pomijasz, za starsze od tych, które wprowadziłeś.Więc:
git merge ccc
git merge fff --no-commit
git merge --continue
git merge source-branch-head
Po kroku 4 git uzna, że twoja gałąź jest nowsza niż to zatwierdzenie, ponieważ już sobie z tym poradziłeś (wybierając zachowanie TWOICH wersji rzeczy).
źródło