2009-05-27 6 views
17

Git에는 전체 SHA 해시 또는 해시의 단축 된 형태 (예 : 처음 6 자 정도)를 포함하여 커밋을 참조하는 다양한 방법이 있습니다. HEAD, HEAD ^, HEAD ^^, HEAD ~ 3 등과 같이 "친숙한"구문을 사용하여 커밋의 이름을 지정할 수도 있습니다.Git에서는 임의의 커밋에 대해 "친숙한"이름을 얻을 수있는 방법이 있습니까?

SHA 해시 형태로 임의의 커밋이 주어지면 Git에 커밋에 "친숙한"이름을 찾을 수있는 도구가 있습니까?

git-show-branch을 사용하는 경우 "친숙한"형식의 수정 목록이 표시되므로 길을 찾아야합니다 ... 나는 도구를 찾을 수 없습니다.

+0

: http://stackoverflow.com/questions/3003554/is-there-any-way-to-get-the -sha-of-its-message- – Benjol

답변

17

"git name-rev"를 사용하면 요청한 양식을 얻을 수 있습니다. 이 양식의 한 가지 문제점은 지점과 관련하여 영구적 인 이름이 아니라는 것입니다. 그래서 대안은 "git describe"입니다. 이것은 주어진 커밋이 태그보다 얼마나 앞서 있는지에 기반하여 대체 친숙한 이름을 생성합니다. 예를 들어

: 나는 "자식 풀"을 수행 한 후

[email protected]:~/src/git <master>$ git name-rev 3cd7388 
3cd7388 master~2 

하지만, 마스터 ~ 2 다른 것을 의미 할 수있다. 반면 :

[email protected]:~/src/git <master>$ git describe 3cd7388 
v1.6.3.1-153-g3cd7388 

이제 "v1.6.3.1-153-g3cd7388은"영구적 이름입니다. 물론, 조금 깁니다 (예를 들어, "--abbrev = 4"를 지정하여 해시 비트를 줄이거 나).하지만 3cd7388은 버전 1.6.3.1 이후 153 개의 변경 사항을 전달합니다.

+1

감사합니다. 두 기술 모두 유용합니다. git-name-rev의 동작에 더 관심이있었습니다. 특정 사용 사례는 git-log --grep을 사용하여 특정 메시지와 커밋을 찾은 후 참조 할 수 있기를 원했기 때문입니다. 해시를 기억할 필요없이 자식을 되돌리기위한 매개 변수로 사용합니다. – mipadi

+2

그런 경우, "--stdin"옵션을 git name-rev에 기록하십시오 : git log 출력을 파이프에 직접 입력 할 수 있어야합니다. – araqnid

+0

와우. 그. 그렇지. 굉장해. 감사! – mipadi

3

git describe보십시오 :

그냥 완전성 '을 위해, 여기에 반대 질문
$ git describe --all --contains 90de2680dc54c0d600b0694bd175bd09357a8dba 
master~2 
관련 문제