etc./StackOverFlow

분기가 이미 마스터에 병합되었는지 어떻게 알 수 있습니까?

청렴결백한 만능 재주꾼 2023. 4. 26. 12:46
반응형

질문자 :hectorsq


여러 분기가 있는 git 저장소가 있습니다.

마스터 브랜치에 이미 병합된 브랜치를 어떻게 알 수 있습니까?



git branch --merged master 는 마스터에 병합된 분기를 나열합니다.

git branch --merged 는 HEAD에 병합된 분기를 나열합니다(즉, 현재 분기의 끝).

git branch --no-merged 는 병합되지 않은 분기를 나열합니다.

기본적으로 이것은 로컬 브랜치에만 적용됩니다. -a 플래그는 로컬 및 원격 분기를 모두 표시하고 -r 플래그는 원격 분기만 표시합니다.


hectorsq

git merge-base 명령을 사용하여 두 분기 간의 최신 공통 커밋을 찾을 수 있습니다. 해당 커밋이 분기 헤드와 동일하면 분기가 완전히 병합된 것입니다.

git branch -d 는 이미 완전히 병합 되지 않은 분기 삭제를 거부하기 때문에 이미 이러한 종류의 작업을 수행합니다.


Greg Hewgill

그래픽 인터페이스 솔루션도 있습니다. 그냥 입력

gitk --all

새 응용 프로그램 창에서 전체 저장소를 그래픽으로 표시하여 분기가 이미 병합되었는지 여부를 쉽게 알 수 있습니다.


iberbeu

마스터에 병합된 분기를 확인하려면 다음 명령을 사용해야 합니다.

  • git branch <flag[-r/-a/none]> --merged master 병합된 모든 분기의 마스터 목록.
  • git branch <flag[-r/-a/none]> --merged master | wc -l 마스터에 병합된 모든 분기의 수를 계산합니다.

플래그는 다음과 같습니다.

  • -a 플래그 - 원격 및 로컬 분기를 표시하는 (모두)
  • -r 플래그 - (원격) 원격 분기만 표시
  • <emptyFlag> - 로컬 브랜치만 표시

예: git branch -r --merged master 는 마스터에 병합된 모든 원격 저장소를 표시합니다.


avivamg

다음과 같은 bash 기능을 사용하고 있습니다. 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 }

Carl G

git merge-base <commit> <commit> .

이 명령은 두 커밋 사이에서 가장 일반적인 조상을 찾습니다. 그리고 공통 조상이 "분기"의 마지막 커밋과 동일하면 "분기"가 이미 마스터에 병합되었다고 안전하게 가정할 수 있습니다.

단계는 다음과 같습니다.

  1. 마스터 브랜치에서 마지막 커밋 해시 찾기
  2. "분기"에서 마지막 커밋 해시 찾기
  3. git merge-base <commit-hash-step1> <commit-hash-step2> 명령을 실행합니다.
  4. 3단계의 출력이 2단계의 출력과 같으면 "분기"가 이미 마스터에 병합된 것입니다.

git merge-base https://git-scm.com/docs/git-merge-base 에 대한 추가 정보.


Hari

원격 지점 정리 주제에 대해

 git branch -r | xargs -t -n 1 git branch -r --contains

여기에는 최신 SHA가 있는 원격 분기 뒤에 오는 각 원격 분기가 나열됩니다.

이것은 병합되었지만 삭제되지 않은 원격 분기와 병합되지 않아 소멸되는 원격 분기를 식별하는 데 유용합니다.

'tig'(gitk와 비슷하지만 터미널 기반)를 사용하는 경우 다음을 수행할 수 있습니다.

 tig origin/feature/someones-decaying-feature

git checkout 없이 브랜치의 커밋 히스토리 보기


xxjjnn

git for-each-ref origin/integration )에 병합되거나 병합되지 않은 분기 목록을 가져옵니다.

주어진 <key> 세트에 따라 정렬한 후 <pattern>과 일치하는 모든 참조를 반복하고 지정된 <format>에 따라 표시합니다.

참고: git fetch 대신 git pull 을 사용하는 경향이 있는 경우 origin/integrationintegration 바꾸십시오.

origin/integration 브랜치에 병합된 로컬 브랜치 목록

 git for-each-ref --merged=origin/integration --format="%(refname:short)" refs/heads/ # ^ ^ ^ # ABC branch1 branch2 branch3 branch4

origin/integration 분기에 병합된 분기만 가져옵니다.
B: 지점 이름 인쇄
heads (예: 분기)만 봅니다.

origin/integration 분기에 병합되지 않은 로컬 분기 목록

 git for-each-ref --no-merged=origin/integration --format="%(committerdate:short) %(refname:short)" --sort=committerdate refs/heads # ^ ^ ^ ^ # ABCD 2020-01-14 branch10 2020-01-16 branch11 2020-01-17 branch12 2020-01-30 branch13

origin/integration 분기에 병합되지 않은 분기만 가져옵니다.
B: 마지막 커밋 날짜와 함께 분기 이름을 인쇄합니다.
C: 커밋 날짜별로 출력 정렬
heads (예: 분기)만 봅니다.


customcommander

다음은 기능 분기에 대한 일반적인 시나리오인 기본 분기와 함께 최신 상태로 리베이스되었을 수 있는 경우에도 분기가 병합되었는지 확인해야 할 때의 기술입니다.

이러한 접근 방식 중 어느 것도 완벽한 증거는 아니지만 여러 번 유용하다는 것을 알았습니다.

1 모든 지점에 대한 로그 표시

gitk 또는 TortoiseGit과 같은 시각적 도구를 사용하거나 --all과 함께 간단히 git log를 사용하여 기록을 살펴보고 기본 분기에 대한 모든 병합을 확인합니다. 이 특정 기능 분기가 병합되었는지 여부를 확인할 수 있어야 합니다.

2 기능 분기에서 병합할 때 항상 원격 분기 제거

기능 브랜치를 병합할 때 항상 로컬 브랜치와 원격 브랜치를 모두 제거하는 좋은 습관이 있다면 다른 컴퓨터에서 단순히 원격 브랜치를 업데이트하고 정리할 수 있으며 기능 브랜치는 사라질 것입니다.

이 작업을 기억하는 데 도움이 되도록 이미 git 흐름 확장(AVH 버전) 을 사용하여 기능 분기를 로컬로 만들고 병합하고 있으므로 다음 git 흐름 후크를 추가하여 원격 분기도 자동 제거할지 묻습니다.

기능 분기 생성/완료 예

 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 커밋 메시지로 검색

항상 원격 분기를 제거하지 않는 경우에도 유사한 커밋을 검색하여 분기가 병합되었는지 여부를 확인할 수 있습니다. 여기서 함정은 커밋을 스쿼시하거나 커밋 메시지를 변경하는 것과 같이 원격 분기가 인식할 수 없는 항목으로 리베이스된 경우입니다.

  • 모든 리모컨 가져오기 및 정리
  • 기능 분기에서 마지막 커밋 메시지 찾기
  • 마스터 브랜치에서 동일한 메시지의 커밋을 찾을 수 있는지 확인

마스터 브랜치의 예제 명령:

 gru gls origin/feature/foo glf "my message"

내 bash .profile 구성에서

 alias gru='git remote update -p' alias glf=findCommitByMessage findCommitByMessage() { git log -i --grep="$1" }

angularsen

다음은 현재 브랜치가 원격 오리진/마스터 브랜치의 데이터를 통합하거나 부족한지 알려주는 작은 한 줄짜리입니다.

 $ git fetch && git branch -r --merged | grep -q origin/master && echo Incorporates origin/master || echo Out of date from origin/master

기능 브랜치에서 작업할 때 이 질문을 접했고 자주 가장 최근 작업이 내 별도의 작업 브랜치에 통합되었는지 확인하고 싶었습니다.

이 테스트를 일반화하기 위해 ~/.gitconfig에 다음 별칭을 추가했습니다.

 [alias] current = !git branch -r --merged | grep -q $1 && echo Incorporates $1 || echo Out of date from $1 && :

그러면 다음과 같이 전화할 수 있습니다.

 $ git current origin/master

내가 현재 상태인지 확인하기 위해.


radke

출처 : http:www.stackoverflow.com/questions/226976/how-can-i-know-if-a-branch-has-been-already-merged-into-master

반응형