programing

주어진 파일에 대한 변경 사항을 포함하는 Git 브랜치 찾기

nasanasas 2020. 11. 8. 10:10
반응형

주어진 파일에 대한 변경 사항을 포함하는 Git 브랜치 찾기


저는 57 개의 지역 지점이 있습니다. 그중 하나에서 특정 파일을 변경 한 것을 알고 있지만 어떤 파일인지 잘 모르겠습니다. 특정 파일에 대한 변경 사항이 포함 된 분기를 찾기 위해 실행할 수있는 일종의 명령이 있습니까?


FILENAME에 대한 변경 사항을 포함하는 모든 분기를 찾습니다 (기록되지 않은 분기 지점 이전 인 경우에도)

FILENAME="<filename>"
git log --all --format=%H $FILENAME | while read f; do git branch --contains $f; done | sort -u

수동 검사 :

gitk --all --date-order -- $FILENAME

마스터에 병합되지 않은 FILENAME의 모든 변경 사항 찾기 :

git for-each-ref --format="%(refname:short)" refs/heads | grep -v master | while read br; do git cherry master $br | while read x h; do if [ "`git log -n 1 --format=%H $h -- $FILENAME`" = "$h" ]; then echo $br; fi; done; done | sort -u

필요한 것은

git log --all -- path/to/file/filename

지점을 즉시 알고 싶다면 다음을 사용할 수도 있습니다.

git log --all --format=%5 -- path/to/file/filename | xargs -I{} -n 1 echo {} found in && git branch --contains {}

또한 이름 --follow이 변경된 경우 Git 로그 명령 에 포함 할 수 있습니다 .


적절한 해결책이 없으면 여전히 문제인 것 같습니다. 댓글을 올릴 크레딧이 충분하지 않아 여기에 약간의 공헌이 있습니다.

Seth Robertson의 첫 번째 솔루션은 저에게 도움이되었지만 로컬 브랜치 만 제공했습니다. 그 중에는 안정 브랜치의 병합으로 인해 오 탐지가 많았습니다.

Adam Dymitruk의 두 번째 솔루션은 전혀 작동하지 않았습니다. 우선, --format = % 5는 무엇입니까? git에 의해 인식되지 않고 그것에 대해 아무것도 찾을 수 없었고 다른 형식 옵션과 함께 작동하도록 만들 수 없습니다.

그러나 그의 첫 번째 솔루션은 --source 옵션과 간단한 grep과 결합하여 도움이되었습니다.

git log --all --source -- <filename> | grep -o "refs/.*" | sort -u

이렇게하면 여러 개의 원격 태그와 분기와 하나의 로컬 분기가 제공되어 파일을 최근에 변경했습니다. 이것이 얼마나 완전한지 확실하지 않습니다.


다음은 무차별 대입 방법이지만 제대로 작동 할 것으로 예상합니다. 커밋되지 않은 변경 사항을 먼저 숨겼는지 확인하십시오. 그러면 현재 어떤 분기에 있는지 전환됩니다.

for branch in $(git for-each-ref --format="%(refname:short)" refs/heads); do
    git checkout $branch && git grep SOMETHING
done

참고 URL : https://stackoverflow.com/questions/6258440/find-a-git-branch-containing-changes-to-a-given-file

반응형