질문 : 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
'개발관련 > Git' 카테고리의 다른 글
git stash 적용 버전 (0) | 2022.03.29 |
---|---|
삭제 된 줄을 "git blame" 하는 방법 (0) | 2022.03.29 |
git "Commit your changes or stash them before you can merge" (0) | 2022.03.29 |
[MacOs] Git 저장소에서 .DS_Store 파일을 제거하는 방법 (0) | 2022.03.29 |
병합 충돌을 일으키는 git stash pop 실행 취소 명령어 (0) | 2022.03.29 |