답변:
HEAD
현재 커밋에 대한 (직접 또는 간접, 즉 기호) 참조입니다. 작업 디렉토리에서 확인한 커밋 (변경 사항 또는 이와 동등한 사항이 아닌 한)은 "git commit"이 새 것을 만드는 커밋입니다. 일반적으로 HEAD
이름이 지정된 다른 분기에 대한 기호 참조입니다. 이 지점은 현재 체크 아웃 된 지점 또는 현재 지점입니다. HEAD
커밋을 직접 가리킬 수도 있습니다. 이 상태를 "분리 된 HEAD"라고하며 이름이없는 익명 분기에있는 것으로 이해 될 수 있습니다.
그리고 Git 1.8.5 이후로 @
는 홀로 바로 가기입니다 HEAD
.
ORIG_HEAD
HEAD
위험한 상태 일 수있는 명령으로 설정하여 이전 상태 로 쉽게 되돌릴 수 있습니다. Git에 reflog가 있으므로 이제는 유용하지 않습니다. HEAD@{1}
대충 같습니다 ORIG_HEAD
( HEAD@{1}
항상 마지막 값은 HEAD
이고 위험한 작업 전의 ORIG_HEAD
마지막 값입니다 HEAD
).
자세한 내용은 git (1) 맨 페이지 , Git 사용 설명서 , Git 커뮤니티 북 및 Git 용어집을 참조하십시오.
에서 자식 리셋
"풀"또는 "병합"은 항상 현재 분기의 원래 팁을에 둡니다
ORIG_HEAD
.
git reset --hard ORIG_HEAD
열심히 재설정하면 인덱스 파일과 작업 트리가 해당 상태로 돌아가고 분기의 끝이 해당 커밋으로 재설정됩니다.
git reset --merge ORIG_HEAD
병합 결과를 검사 한 후 다른 분기의 변경 사항이 만족스럽지 않을 수 있습니다. "
git reset --hard ORIG_HEAD
"을 (를) 실행 하면 현재 위치로 돌아갈 수 있지만 원하지 않는 로컬 변경 사항은 삭제됩니다. "git reset --merge
"는 로컬 변경 사항을 유지합니다.
패치가 적용되기 전에 ORIG_HEAD는 현재 분기의 끝으로 설정됩니다.
이 방법은git am
잘못된 분기 에서 ' '를 실행 하거나 사서함을 변경하여보다 쉽게 수정되는 커밋의 오류 (예 : "보낸 사람 :"줄의 + 오류) 와 같은 여러 커밋에 문제가있는 경우에 유용합니다 .또한 병합은 항상 '
.git/ORIG_HEAD
'를 HEAD의 원래 상태로 설정 하므로 문제가있는 병합은 'git reset ORIG_HEAD
' 를 사용하여 제거 할 수 있습니다 .
참고 : 여기에서
HEAD는 움직이는 포인터입니다. 때로는 현재 분기를 의미하고 때로는 그렇지 않습니다.
따라서 HEAD는 이미 "현재 지점"과 동의어 가 아닙니다 .
HEAD는 git의 모든 곳 에서 "현재"를 의미 하지만 반드시 "현재 분기"(즉, 분리 된 HEAD)를 의미하지는 않습니다.
그러나 거의 항상 "현재 커밋"을 의미합니다.
커밋 "git commit
"이 (가) 위에 구축되어 있으며 "git diff --cached
"및 "git status
"이 (가) 비교되었습니다.
현재 분기가 매우 제한된 상황에서만 의미합니다 (정확히 분기 이름이 작동하기를 원할 때 --- commit / rebase 등을 통해 분기 팁 재설정 및 성장).Reflog는 시간과 시간을 거슬러 올라가는 차량으로, "현재"라는 개념과 흥미로운 상호 작용을합니다.
HEAD@{5.minutes.ago}
"헤어 symref를 역 참조하여 현재 어떤 지점이 있는지 확인한 다음 5 분 전에 해당 지점의 끝이 어디에 있는지 확인하십시오."를 의미 할 수 있습니다.
또는 "5 분 전에 HEAD라고했던 커밋은 무엇입니까? 예를 들어"git show HEAD "를 수행 한 경우"를 의미 할 수 있습니다.
git1.8.4 (2013 년 7 월) 소개 새로운 표기법을 소개 했습니다!
(실제로 2013 년 4 분기 1.8.5 또는 1.9 일 것입니다 : commit 9ba89f4로 다시 도입 되었습니다 )
대신 네 개의 대문자 "을 입력하는
HEAD
"당신은 말할 수있다 "@
"지금,
예를 "git log @
".
커밋 cdfd948 참조
HEAD
특히 '@
'를 대신 사용할 수있는 경우 ' '를 입력하는 것은 지루 합니다.'
@
' 를 선택하는 이유는 참조가없고 조작이없는 것을 제외하고는ref@op
구문 (예 :)에서 자연스럽게 뒤 따르기 때문에 ' 'HEAD@{u}
를 사용하지 않는 것이 좋습니다HEAD
.이제 우리는 '
git show @~1
'를 사용할 수 있습니다 .지금까지 '
@
'은 (는) 유효한 이름이지만이 아이디어와 충돌하므로 유효하지 않게하겠습니다. 아마도이 이름을 사용한 사람은 거의 없을 것입니다.
1.8.4-RC3 기간 동안 블로그 게시물 (14 일, 2013 년 8 월)이 기능이 복귀 지연되었다 (감사합니다 발표 컵 케이크를 위한 헤드 업 ). 커밋 9ba89f4 (2013 년 9 월)
와 함께 다시 소개됩니다 .
commit 2c2b664를 참조하십시오 :
@
단축키 추가 HEAD
"커밋 cdfd948 은 "
@
"(그리고 수정자가@{u}
적용된 형식) 에만 적용되는 것이 아니라 "refs/heads/@/foo
" 에도 영향을 미치므로 " "에 영향을 미칩니다 .속기의 기본 개념이 좋을 수 있으며 나중에 주제를 다시 시도 할 수 있지만 다음 릴리스에서 현재 사용 사례에 영향을 미치지 않도록 되 돌리겠습니다.
git reset
는을 생성합니다 ORIG_HEAD
. 따라서 rm
수동으로해야합니다. 예를 들어 stackoverflow.com/a/12418078/6309 를 참조하십시오 .
HEAD는 현재 분기를 가리키고 ORIG_HEAD는 "위험한"작업을 수행하기 전에 이전 HEAD를 저장하는 데 사용됩니다.
예를 들어 git-rebase 및 git-am은 변경 사항을 적용하기 전에 분기의 원래 팁을 기록합니다.
git branch foo -b
고아가 커밋 할 분기를 "만들기"위해해야합니다.
보낸 사람 man 7 gitrevisions
:
HEAD는 작업 트리의 변경 사항을 기반으로하는 커밋의 이름을 지정합니다. FETCH_HEAD는 마지막 git 페치 호출로 원격 저장소에서 페치 한 브랜치를 기록합니다. ORIG_HEAD는 HEAD를 과감한 방식으로 움직여서 작동하기 전에 HEAD의 위치를 기록하는 명령에 의해 작성되므로 분기의 팁을 실행하기 전에 상태로 쉽게 변경할 수 있습니다. MERGE_HEAD는 git merge를 실행할 때 브랜치로 병합하는 커밋을 기록합니다. CHERRY_PICK_HEAD는 git cherry-pick을 실행할 때 체리 피킹하는 커밋을 기록합니다.
HEAD
이제 (다음 git1.8.4) '@
'입니다! 아래에서 편집 한 답변