Skąd mogę wiedzieć w git, czy gałąź została już połączona z master?
Mam repozytorium git z wieloma gałęziami.
Skąd mogę wiedzieć, które gałęzie są już scalone w gałąź master?
7 answers
git branch --merged master
lista gałęzi połączonych w master
git branch --merged
Lista gałęzi połączonych w HEAD (tj. końcówkę bieżącej gałęzi)
git branch --no-merged
Lista gałęzi, które nie zostały połączone
Domyślnie dotyczy to tylko lokalnych oddziałów. Znacznik -a
pokazuje zarówno lokalne, jak i zdalne gałęzie, a znacznik -r
pokazuje tylko odległe gałęzie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-25 09:31:20
Możesz użyć git merge-base
polecenie, aby znaleźć najnowszy commit pomiędzy dwoma gałęziami. Jeśli ten commit jest taki sam jak gałąź head, to gałąź została całkowicie scalona.
Zauważ, że git branch -d
robi już takie rzeczy, ponieważ odmówi usunięcia gałęzi, która nie została już całkowicie scalona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-06 11:51:39
Istnieje również rozwiązanie interfejsu graficznego. Po prostu wpisz
gitk --all
Nowe okno aplikacji wyświetli monit z graficzną reprezentacją całego repo, gdzie bardzo łatwo jest zorientować się, czy gałąź została już połączona, czy nie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-23 10:19:22
na temat czyszczenia odległych gałęzi
git branch -r | xargs -t -n 1 git branch -r --contains
To lista każdej zdalnej gałęzi, po której następują odległe gałęzie, w których znajdują się ich najnowsze Sha.
Jest to przydatne do rozróżnienia, które zdalne gałęzie zostały połączone, ale nie usunięte, a które nie zostały połączone i w ten sposób ulegają rozpadowi.
Jeśli używasz ' tig '(jest podobny do gitk, ale oparty na terminalu), możesz
tig origin/feature/someones-decaying-feature
Aby zobaczyć historię zatwierdzeń gałęzi bez konieczności git checkout
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-23 10:09:57
Użyj git merge-base <commit> <commit>
.
To polecenie znajduje najlepszy wspólny przodek (- y) pomiędzy dwoma commitami. A jeśli wspólny przodek jest identyczny z ostatnim commitem "gałęzi", to możemy bezpiecznie założyć, że" gałąź " została już scalona w master.
Oto kroki
- Znajdź ostatni hash commit w gałęzi master Znajdź ostatni hash commit na gałęzi
- Uruchom polecenie
git merge-base <commit-hash-step1> <commit-hash-step2>
. - JEŚLI wyjście kroku 3 jest takie samo jak wyjście Krok 2, następnie "gałąź" została już scalona w master.
Więcej informacji o git merge-base https://git-scm.com/docs/git-merge-base .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-13 02:05:01
Oto moje techniki, kiedy muszę dowiedzieć się, czy gałąź została połączona, nawet jeśli mogła być rebasowana, aby była aktualna z naszą główną gałęzią, co jest powszechnym scenariuszem dla gałęzi feature.
Żadne z tych podejść nie jest niezawodne, ale uznałem je za przydatne wiele razy.
1 Pokaż log dla wszystkich gałęzi
Używając wizualnego narzędzia, takiego jak gitk lub TortoiseGit, lub po prostu git log with --all, Przejrzyj historię, aby zobaczyć wszystkie połączenia z główną gałęzią. Ty powinien być w stanie wykryć, czy ta konkretna gałąź funkcji została połączona, czy nie.
2 zawsze Usuń zdalną gałąź podczas scalania w gałęzi funkcji
Jeśli masz dobry zwyczaj usuwania zarówno lokalnej, jak i zdalnej gałęzi po połączeniu w gałąź funkcji, możesz po prostu zaktualizować i przyciąć piloty na innym komputerze, a gałęzie funkcji znikną.
Aby to zapamiętać, Używam już git flow extensions (AVH edition) do Utwórz i scal moje gałęzie funkcji lokalnie, więc dodałem następujący hook git flow, aby zapytać mnie, czy chcę również automatycznie usunąć zdalną gałąź.
Przykład create/finish feature branch
554 Andreas:MyRepo(develop)$ git flow start tmp
Switched to a new branch 'feature/tmp'
Summary of actions:
- A new branch 'feature/tmp' was created, based on 'develop'
- You are now on branch 'feature/tmp'
Now, start committing on your feature. When done, use:
git flow feature finish tmp
555 Andreas:MyRepo(feature/tmp)$ git flow finish
Switched to branch 'develop'
Your branch is up-to-date with 'if/develop'.
Already up-to-date.
[post-flow-feature-finish] Delete remote branch? (Y/n)
Deleting remote branch: origin/feature/tmp.
Deleted branch feature/tmp (was 02a3356).
Summary of actions:
- The feature branch 'feature/tmp' was merged into 'develop'
- Feature branch 'feature/tmp' has been locally deleted
- You are now on branch 'develop'
556 Andreas:ScDesktop (develop)$
.git / hooks / post-flow-feature-finish
NAME=$1
ORIGIN=$2
BRANCH=$3
# Delete remote branch
# Allows us to read user input below, assigns stdin to keyboard
exec < /dev/tty
while true; do
read -p "[post-flow-feature-finish] Delete remote branch? (Y/n) " yn
if [ "$yn" = "" ]; then
yn='Y'
fi
case $yn in
[Yy] )
echo -e "\e[31mDeleting remote branch: $2/$3.\e[0m" || exit "$?"
git push $2 :$3;
break;;
[Nn] )
echo -e "\e[32mKeeping remote branch.\e[0m" || exit "$?"
break;;
* ) echo "Please answer y or n for yes or no.";;
esac
done
# Stop reading user input (close STDIN)
exec <&-
exit 0
3 Szukaj przez commit message
Jeśli nie zawsze usuniesz zdalną gałąź, nadal możesz wyszukać podobne commity, aby określić, czy gałąź została scalona, czy nie. Pułapką jest to, że jeśli zdalna gałąź została zmieniona na nierozpoznawalne, takie jak zgniatanie commitów lub zmiana komunikatów commitów.
- Pobierz i przycinaj wszystkie piloty
- znajdź wiadomość o ostatnim zatwierdzeniu w gałęzi funkcji
- sprawdź, czy commit z tą samą wiadomością może zostać znaleziony w gałęzi master
Przykładowe polecenia na gałęzi master:
gru
gls origin/feature/foo
glf "my message"
W mojej imprezie .Konfiguracja profilu
alias gru='git remote update -p'
alias glf=findCommitByMessage
findCommitByMessage() {
git log -i --grep="$1"
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-29 08:45:25
Używam następującej funkcji bash jak: git-is-merged develop feature/new-feature
git-is-merged () {
merge_destination_branch=$1
merge_source_branch=$2
merge_base=$(git merge-base $merge_destination_branch $merge_source_branch)
merge_source_current_commit=$(git rev-parse $merge_source_branch)
if [[ $merge_base = $merge_source_current_commit ]]
then
echo $merge_source_branch is merged into $merge_destination_branch
return 0
else
echo $merge_source_branch is not merged into $merge_destination_branch
return 1
fi
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-22 16:49:55