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?

 885
git
Author: hectorsq, 2008-10-22

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.

 1439
Author: hectorsq,
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.

 80
Author: Greg Hewgill,
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

 22
Author: iberbeu,
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

 12
Author: xxjjnn,
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

  1. Znajdź ostatni hash commit w gałęzi master
  2. Znajdź ostatni hash commit na gałęzi
  3. Uruchom polecenie git merge-base <commit-hash-step1> <commit-hash-step2>.
  4. 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 .

 9
Author: Hari,
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"
}
 5
Author: angularsen,
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
}
 4
Author: Carl G,
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