개발관련/Git

Git 커밋의 출처 찾기

Rateye 2022. 3. 29. 13:34
728x90
반응형
질문 : Git 커밋의 출처 찾기

SHA-1 해시 값이 주어지면 커밋이 어떤 분기에서 오는지 알아내는 방법이 있습니까?

Ruby Grit을 사용하여이 작업을 수행하는 방법을 알려 주시면 보너스 포인트를드립니다.

답변

Dav는 정보가 직접 저장되지 않는다는 것이 맞지만, 그것이 당신이 알 수 없다는 것을 의미하지는 않습니다. 다음은 수행 할 수있는 몇 가지 작업입니다.

커밋이 있는 브랜치를 찾습니다.

git branch -a --contains <commit>

이것은 그들의 역사에서 주어진 커밋을 가진 모든 지점을 알려줄 것입니다. 커밋이 이미 병합 된 경우 분명히 유용하지 않습니다.

재로그 검색

커밋이 생성 된 리포지토리에서 작업하는 경우 해당 커밋 행에 대한 reflog를 검색 할 수 있습니다. 90 일이 지난 리플 로그는 git-gc에 의해 정리되므로 커밋이 너무 오래되면 찾을 수 없습니다. 즉, 다음과 같이 할 수 있습니다.

git reflog show --all | grep a871742

커밋 a871742를 찾으려면. 커밋의 첫 번째 축약 형 7 자리를 사용해야합니다. 출력은 다음과 같아야합니다.

a871742 refs/heads/completion@{0}: commit (amend): mpc-completion: total rewrite

"완료"분기에서 커밋이 이루어 졌음을 나타냅니다. 기본 출력은 축약 된 커밋 해시를 표시하므로 전체 해시를 검색하지 않도록하십시오. 그렇지 않으면 아무것도 찾을 수 없습니다.

git reflog show git log -g --abbrev-commit --pretty=oneline 의 별칭 일 뿐이므로 출력 형식을 조작하여 grep에서 다른 것을 사용할 수 있도록하려면 그게 시작점입니다!

커밋이 만들어진 리포지토리에서 작업하지 않는 경우이 경우에 할 수있는 최선의 방법은 리플 로그를 검사하고 커밋이 리포지토리에 처음 도입 된시기를 찾는 것입니다. 운 좋게도 당신은 그것이 맡겨진 지점을 가져 왔습니다. 커밋 트리와 리플 로그를 동시에 걸을 수 없기 때문에 좀 더 복잡합니다. reflog 출력을 구문 분석하여 각 해시에 원하는 커밋이 포함되어 있는지 여부를 확인하려고합니다.

후속 병합 커밋 찾기

이것은 워크 플로우에 따라 다르지만 좋은 워크 플로우를 사용하면 개발 브랜치에서 커밋이 만들어지고 병합됩니다. 다음과 같이 할 수 있습니다.

git log --merges <commit>..

조상으로 주어진 커밋을 가진 병합 커밋을 확인합니다. (커밋이 한 번만 병합 된 경우 첫 번째 병합은 다음 병합이어야합니다. 그렇지 않으면 몇 가지를 검토해야합니다.) 병합 커밋 메시지에는 병합 된 브랜치 이름이 포함되어야합니다.

이 작업을 --no-ff 옵션을 사용하여 git merge 를 사용하여 빨리 감기의 경우에도 병합 커밋 생성을 강제 할 수 있습니다. (너무 열심하지 마십시오. 과도하게 사용하면 혼란 스러워 질 수 있습니다.) 관련 질문에 대한 VonC의 답변 은이 주제에 대해 유용하게 설명합니다.

출처 : https://stackoverflow.com/questions/2706797/finding-what-branch-a-git-commit-came-from
728x90
반응형