Mam repozytorium git z wieloma gałęziami.
Skąd mam wiedzieć, które gałęzie są już połączone w gałąź główną?
git branch --merged master
wyświetla gałęzie scalone w master
git branch --merged
wyświetla gałęzie połączone w HEAD (tj. wierzchołek bieżącego oddziału)
git branch --no-merged
wyświetla gałęzie, które nie zostały scalone
Domyślnie dotyczy to tylko lokalnych oddziałów. -a
Flag pokaże zarówno lokalnych i zdalnych oddziałów, a -r
pokazy flag tylko zdalnych oddziałów.
git branch --merged
a następnie usunąłem lokalną i zdalną gałąź.git branch -a --merged/no-merged
działa również bez tworzenia lokalnego oddziału śledzenia.git branch -r --merged/--no-merged
znaleźć tylko zdalne oddziały.--merged/--no-merged
pobiera opcjonalny argument zatwierdzenia po nim. Przynajmniej w mojej wersji git (1.9.1) dodanie flagi-a
lub-r
po nim powoduje błąd krytyczny. Dodaj-a
lub-r
wcześniej--(no-)merged
.Za pomocą tego
git merge-base
polecenia można znaleźć najnowsze wspólne zatwierdzanie między dwoma gałęziami. Jeśli to zatwierdzenie jest takie samo jak szef gałęzi, gałąź została całkowicie scalona.źródło
git branch -d
odmówi usunięcia gałęzi, która nie została scalona z bieżącą gałęzią. Nie usuwam bieżącej gałęzi.Istnieje również rozwiązanie interfejsu graficznego. Po prostu wpisz
gitk --all
W nowym oknie aplikacji zostanie wyświetlona graficzna reprezentacja całego repozytorium, przy czym bardzo łatwo jest stwierdzić, czy gałąź została już scalona, czy nie
źródło
git
klienta. Na Ubuntuapt-get install gitk
.brew install git-gui
, aby dostaćgitk
się do wiersza poleceń.Korzystam z następującej funkcji bash, takiej jak:
git-is-merged develop feature/new-feature
źródło
Zastosowanie
git merge-base <commit> <commit>
.To polecenie wyszukuje najlepszych wspólnych przodków między dwoma zatwierdzeniami. A jeśli wspólny przodek jest identyczny z ostatnim zatwierdzeniem „gałęzi”, to możemy spokojnie założyć, że „gałąź” została już scalona z masterem.
Oto kroki
git merge-base <commit-hash-step1> <commit-hash-step2>
.Więcej informacji na temat git merge-base https://git-scm.com/docs/git-merge-base .
źródło
master
został scalonybranch
, a następnie dodano 4 kolejne zmianybranch
.git log -1 $(git merge-base base-branch feature-branch)
a jeśli zobaczyszfeature-branch
w wynikach, to wiesz, że są scalone?Na temat czyszczenia zdalnych gałęzi
Zawiera listę każdej zdalnej gałęzi, a po niej zdalne gałęzie, w których znajdują się ich najnowsze SHA.
Jest to przydatne do rozpoznania, które zdalne gałęzie zostały scalone, ale nie usunięte, a które nie zostały scalone, a zatem ulegają rozkładowi.
Jeśli używasz „tig” (jest jak gitk, ale oparty na terminalach), możesz
aby zobaczyć historię zatwierdzania oddziału bez konieczności pobierania kasy
źródło
Aby sprawdzić, które gałęzie są połączone w master, należy użyć następujących poleceń:
git branch <flag[-r/-a/none]> --merged master
lista wszystkich gałęzi scalonych w master.git branch <flag[-r/-a/none]> --merged master | wc -l
policz liczbę wszystkich oddziałów scalonych w master.Flagi są:
-a
flag - (wszystkie) pokazujące oddziały zdalne i lokalne-r
flag - (zdalny) pokazuje tylko zdalne gałęzie<emptyFlag>
- pokazywanie tylko lokalnych oddziałówna przykład:
git branch -r --merged master
pokaże wszystkie zdalne repozytoria połączone w master.źródło
Oto moje techniki, kiedy muszę dowiedzieć się, czy gałąź została scalona, nawet jeśli można ją było zmienić, aby była aktualna z naszą główną gałęzią, co jest częstym scenariuszem dla gałęzi funkcji.
Żadne z tych podejść nie jest głupie, ale wielokrotnie uważałem je za przydatne.
1 Pokaż dziennik dla wszystkich oddziałów
Używając wizualnego narzędzia, takiego jak gitk lub TortoiseGit, lub po prostu git log z opcją --all, przejrzyj historię, aby zobaczyć wszystkie połączenia do głównej gałęzi. Powinieneś być w stanie stwierdzić, czy ta konkretna gałąź funkcji została scalona, czy nie.
2 Zawsze usuwaj zdalną gałąź podczas łączenia w gałąź funkcji
Jeśli masz dobry nawyk usuwania zarówno gałęzi lokalnej, jak i zdalnej podczas scalania w gałęzi funkcji, możesz po prostu zaktualizować i przyciąć piloty na drugim komputerze, a gałęzie funkcji znikną.
Aby to zapamiętać, używam już rozszerzeń git flow (edycja AVH) do lokalnego tworzenia i scalania moich gałęzi funkcji, dlatego dodałem następujący haczyk git flow z pytaniem, czy chcę również automatycznie usunąć gałąź zdalną.
Przykład tworzenia / zakończenia gałęzi funkcji
.git / hooks / post-flow-feature-finish
3 Wyszukaj według komunikatu zatwierdzenia
Jeśli nie zawsze usuwasz zdalną gałąź, nadal możesz wyszukać podobne zatwierdzenia, aby ustalić, czy gałąź została scalona, czy nie. Pułapka polega na tym, że gałąź zdalna została przeniesiona do nierozpoznawalnego, takiego jak zgniecenie zatwierdzeń lub zmiana komunikatów zatwierdzania.
Przykładowe polecenia w gałęzi master:
W moim bashu .profile config
źródło
git log --all --color --graph --decorate --topo-order --date=relative --abbrev-commit --pretty=format:"%C(green)%h %C(red bold)[%<(14)%ad] %Creset%s%Cred%d%C(blue) [%an]"
git log
możesz dodać,--merges
aby pokazać tylko zatwierdzenia scalania. stackoverflow.com/a/25986615/134761Oto mały linijka, która poinformuje cię, czy twoja gałąź zawiera lub nie zawiera danych ze zdalnego źródła / gałęzi master:
Natknąłem się na to pytanie podczas pracy nad gałęzią funkcji i często chciałem się upewnić, że najnowsze prace zostały włączone do mojej osobnej gałęzi.
Aby uogólnić ten test, dodałem następujący alias do mojego ~ / .gitconfig:
Następnie mogę zadzwonić:
sprawdzić, czy jestem obecny.
źródło