주어진 파일에 대한 변경 사항을 포함하는 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
'programing' 카테고리의 다른 글
margin-top 작동하지 않음 clear : both (0) | 2020.11.08 |
---|---|
내 장고 관리 사이트에 CSS 스타일이없는 이유 (0) | 2020.11.08 |
자체 종료 AWS EC2 인스턴스? (0) | 2020.11.08 |
Mac OS X에 JRE 1.7을 설치하고 Eclipse와 함께 사용하는 방법은 무엇입니까? (0) | 2020.11.08 |
VIM : let g :, let b : 등의 차이점은 무엇입니까? (0) | 2020.11.08 |