Git에서 기본을 다시 설정한 후 병합되기 때문에 - merged에 표시해도 표시되지 않지만 필요하지 않은 로컬 브랜치

3339 단어 Git
원격으로 밀어낸 지점을 비로컬 베이스 다음에 마스터 등에 합치면 원본 로컬 지점 git branch --merged 은 표시되지 않지만 합쳐졌기 때문에 필요하지 않은 지점입니다.
Gitlab에서 ff가 MR을 병합할 때만 병합할 수 있도록 설정된 경우Merge commit with semi-linear history, 밀어낸 후 Gitlab에 다시 기초한 후에 병합할 수 있기 때문에 로컬에 이 지점이 남아 있습니다.
즉, 다음과 같이 B에서 브랜치가 발생하는 MR에 대해 설명합니다.

비로컬에서 MR 기반 재결합을 수행하면 Y를 가리키는 로컬 브랜치가 결합되므로 삭제 후에는 문제가 없습니다git branch --merged. 그러나 표시되지 않습니다.

어떤 지점이 마스터에 통합되었는지 어떻게 검사합니까


나는 몇 가지 방법을 생각해 낼 수 있다
마스터와 같은 위치에 있는지 확인하려면 마스터를 다시 지정합니다.
git checkout feature-hoge
git rebase origin/master

# feature-hoge と origin/master が同じ位置なら feature-hoge は削除できます
git log --decorate --oneline --graph
합병 후에 차이가 있는지 없는지를 보자.
git checkout -B master origin/master
git merge --no-commit --no-ff feature-hoge

# 差分がなければ feature-hoge は削除できます
git status

# マージ途中状態なので abort しておきます
git merge --abort

어떤 지점이 마스터에 통합되었는지 확인하는 방법: 수정


위의 두 가지 방법은 작업 트리와 색인이 괴롭히기 때문에 사용하기 어렵다.아래와 같이 작업 트리를 놀지 않고 확인할 수 있습니다.
우선, 합병된 지점과 마스터의 공공 조상에 대한 제출을 확인할 수 있습니다.
git merge-base feature-hoge master
제출된 삼방향 병합을 사용하는 내용을 표시합니다.
git merge-tree abc12345 feature-hoge master
이렇게 아무것도 표시되지 않으면feature-hoge가 마스터에 통합되어 삭제할 수 있습니다.또한 git merge-tree 표시만 하기 때문에 작업 트리와 색인을 오염시키지 않는다.
셸 스크립트 git ls-merged 를 생성하여 다음과 같이 합니다.
#!/bin/bash

ref=${@:-HEAD}

git for-each-ref --format='%(refname:short)' refs/heads/ | while read -r x; do
  if ! git merge-tree "$(git merge-base "$x" "$ref")" "$ref" "$x" 2>/dev/null | read -r; then
    echo "$x"
  fi
done

좋은 웹페이지 즐겨찾기