현재 Git에서 체크 아웃 된 커밋 찾기


157

git bisect세션 중간에 있습니다.

현재 어떤 커밋 (SHA1 해시)을 찾는 명령은 무엇입니까? git status이것을 제공하지 않습니다.

편집 : 전화를 걸고 git log첫 번째 작품이 작동 하는 것 같아요 ?

답변:


173

git bisect세션 중에 현재 작업 복사본에 체크 아웃 한 커밋을 보는 5 가지 방법이 있습니다 ( 옵션 1-4는 bisect를 수행하지 않는 경우에도 작동 함 ).

  1. git show.
  2. git log -1.
  3. 배쉬 프롬프트.
  4. git status.
  5. git bisect visualize.

아래에서 각 옵션에 대해 자세히 설명하겠습니다.

옵션 1 : git show

현재 체크 아웃 한 커밋을 결정하는 방법에 대한 일반적인 질문에 대한 이 답변 에서 설명했듯이 (출력 중뿐만 아니라 git bisect) 패치 출력을 억제 git show하는 -s옵션 과 함께 사용할 수 있습니다 .

$ git show --oneline -s
a9874fd Merge branch 'epic-feature'

옵션 2 : 자식 로그 -1

git log -1현재 진행중인 커밋을 찾기 만하면 됩니다.

$ git log -1 --oneline
c1abcde Add feature-003

옵션 3 : 배쉬 프롬프트

Git 버전 1.8.3 이상 (또는 이전 버전 이었습니까?)에서 Bash 프롬프트가 작업 복사본에 체크 아웃 한 현재 분기를 표시하도록 구성되어 있으면 확인한 현재 커밋도 표시됩니다 이등분 세션 중 또는 "분리 된 HEAD"상태에있을 때 아래 예에서 현재 c1abcde체크 아웃했습니다.

# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $

# Prompt at detached HEAD state 
user ~ (c1abcde...) $

옵션 4 : 자식 상태

또한 Git 버전 1.8.3 이상에서 (그리고 이전에는 다시 확실하지 않을 git status수도 있음 ) 실행 중이 면 bisect 중 및 분리 된 HEAD 상태에있을 때 체크 아웃 한 커밋이 표시됩니다.

$ git status
# HEAD detached at c1abcde <== RIGHT HERE

옵션 5 : 자식 이등분 시각화

마지막으로을 수행하는 동안 또는 내장 별칭 을 git bisect사용하여 간단하게 시작할 수 있으므로 어느 커밋이 있는지와 지금까지 나쁘고 좋은 것으로 표시 한 커밋을 그래픽으로 볼 수 있습니다. 나는 이것이 1.8.3 버전 이전에 존재했다고 확신한다. 어떤 버전이 도입되었는지는 확실하지 않다.git bisect visualizegit bisect viewgitk

git bisect visualize 
git bisect view # shorter, means same thing

여기에 이미지 설명을 입력하십시오


산뜻한. 내가 질문을했을 때 나는 Git 1.8에 없었다. t이 질문을 한 이후로 실제로는 더 이상 이등분을하지 않았습니다 git log -p -S <search>.
Steven Lu

git status분리 상태가 아닌 한 커밋 ID를 표시하지 않습니다. 그렇지 않으면 " 모든 지점에서 "라고 표시됩니다. git show작동하지만
Kip

87

당신은 할 수 있습니다 :

git rev-parse HEAD

조금 더 설명하려면 다음과 git rev-parse해석에 대한 자식의 기본 명령입니다 커밋 당신이 이름을 지정할 수있는 이국적인 가지 방법 중 하나를 하고 HEAD현재 커밋 또는 지점에 대한 참조입니다. ( git bisect세션 에서는 분기가 아닌 커밋 ( "분리 된 HEAD")을 직접 가리 킵니다.)

또는 기억하기 쉬운 방법은 다음과 같습니다.

git show

... 기본적으로 커밋을 표시합니다 HEAD. 보다 간결한 버전을 위해 다음을 수행 할 수 있습니다.

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation

3
다른 곳에서 사용하기 위해 해시를 얻으려면 git rev-parse HEAD모든 가비지 대안에 대한 처리가 필요하지 않습니다.
Nick T

17
$ git rev-parse HEAD
273cf91b4057366a560b9ddcee8fe58d4c21e6cb

최신 정보:

또는 (태그가있는 경우) :

(버전 이름을 지정하는 데 좋으며 git으로 다시 전달하는 데 좋지 않습니다.)

$ 자식 설명
v0.1.49-localhost-ag-1-g273cf91

또는 (Mark가 제안한대로 완전성을 위해 여기에 나열) :

$ git show --oneline -s
c0235b7 EXIF ​​방향에 따라 업로드 된 이미지를 자동 회전

7
기억하기 쉬운 것이 아니라 SHA1을 요청했습니다. ;-)
Alexander Gladysh 2016 년

이 버전은 스크립트에서 약간의 검사를 원할 때 매우 유용합니다
Daniele Licitra

12

간단한 정보 만 추출 git show하려면 --format=<string>옵션 을 사용하여 정보를 얻을 수 있으며 ...로 diff를 제공하지 않도록 요청할 수 있습니다 --no-patch. 이것은 당신이 원하는 것의 printf 스타일 출력을 얻을 수 있다는 것을 의미합니다. 종종 단일 필드 일 수도 있습니다.

예를 들어 단축 된 해시 ( %h) 만 얻으려면 다음과 같이 말할 수 있습니다.

$ git show --format="%h" --no-patch
4b703eb

bash의 환경 변수에 저장하려는 경우 (사람이하고 싶을 수도 있음) $()구문을 사용할 수 있습니다 .

$ GIT_COMMIT="$(git show --format="%h" --no-patch)"

$ echo $GIT_COMMIT
4b703eb

수행 할 수있는 작업git show --help 의 전체 목록은에 있습니다. 그러나 다음은 유용 할 수있는 약식 속성 목록입니다.

  • %H 커밋 해시
  • %h 약식 커밋 해시
  • %T 트리 해시
  • %t 약식 트리 해시
  • %P 부모 해시
  • %p 약식 부모 해시
  • %an 저자 이름
  • %ae 저자 이메일
  • %at 작성자 날짜, UNIX 타임 스탬프
  • %aI 작성자 날짜, 엄격한 ISO 8601 형식
  • %cn 커미터 이름
  • %ce 커미터 이메일
  • %ct 커미터 날짜, UNIX 타임 스탬프
  • %cI 커미터 날짜, 엄격한 ISO 8601 형식
  • %s 제목
  • %f 파일 이름에 적합한 위생 처리 된 제목 줄
  • %gD reflog 선택기, 예 : refs / stash @ {1}
  • %gd 단축 된 reflog 선택기 (예 : stash @ {1}

이러한 모든 서식 옵션이지만 branchshow 에는 아무것도 없습니다 .
bvj

2

사용 git show인수를 지정하지 않을 때 메시지를 커밋도 보여, 현재의 디폴트는 커밋.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.