Git HEAD 뜻 설명 및 버 전 반환
12584 단어 CMake 명령 대전
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000
먼저, Git 은 현재 버 전이 어떤 버 전인 지 알 아야 한다. Git 에서
HEAD
로 현재 버 전, 즉 최신 제출 3628164...882e1e0
(내 제출 ID 가 너 와 다 를 것 임 을 주의 하 라) 을 표시 한다. 이전 버 전 은 HEAD^
이 고 이전 버 전 은 HEAD^^
이다. 물론 100 개 버 전 으로 100 개 ^
를 쓰 는 것 은 쉽게 셀 수 없 기 때문에 쓰기 쉽다.HEAD~100
。 HEAD
이 가리 키 는 버 전이 현재 버 전이 기 때문에 Git 은 우리 가 버 전의 역 사 를 오 가 며 명령 git reset --hard commit_id
을 사용 할 수 있 도록 합 니 다. git log
제출 역 사 를 확인 하여 어느 버 전 으로 되 돌아 갈 지 확인 할 수 있 습 니 다. git reflog
명령 의 역 사 를 살 펴 보고 미래 로 돌아 갈 버 전 을 확인 해 야 한다. Git is a distributed version control system.
Git is free software distributed under the GPL.
그리고 제출 시도:
$ git add readme.txt
$ git commit -m "append GPL"
[master 3628164] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
이렇게 파일 을 수정 해서 버 전 라 이브 러 리 에 계속 제출 하 는 것 은 RPG 게임 을 할 때 한 번 닫 을 때마다 자동 으로 게임 상 태 를 저장 하 는 것 과 같 습 니 다. 한 번 닫 히 지 않 으 면 이전 닫 힌 상 태 를 읽 을 수 있 습 니 다. 어떤 때 는 보스 를 치기 전에 수 동 으로 저장 합 니 다. 만약 에 보스 가 실패 하면 가장 가 까 운 곳 에서다시 시작 합 니 다. Git 도 마찬가지 입 니 다. 파일 이 어느 정도 수정 되 었 다 고 생각 될 때마다 '스냅 샷 저장' 을 할 수 있 습 니 다. 이 스냅 샷 은 Git 에서
commit
이 라 고 불 립 니 다. 파일 을 잘못 고치 거나 잘못 삭제 하면 몇 달 동안 의 작업 성 과 를 모두 잃 어 버 리 는 것 이 아니 라 최근 의 commit
에서 복원 해서 계속 작업 할 수 있 습 니 다.이제 readme. txt 파일 의 몇 가지 버 전이 Git 창고 에 제출 되 었 는 지 살 펴 보 겠 습 니 다.
버 전 1: readme 파일 작성
Git is a version control system.
Git is free software.
버 전 2: add distributed
Git is a distributed version control system.
Git is free software.
버 전 3: append GPL
Git is a distributed version control system.
Git is free software distributed under the GPL.
물론 실제 작업 에서 우리 의 머 릿 속 에 수천 줄 의 파일 이 매번 어떤 내용 을 바 꾸 었 는 지 기억 할 수 있 습 니까? 그렇지 않 으 면 버 전 관리 시스템 이 무엇 을 해 야 합 니까? 버 전 관리 시스템 은 반드시 어떤 명령 이 우리 에 게 역사 기록 을 알려 줄 수 있 습 니 다. Git 에서 우 리 는
git log
명령 으로 볼 수 있 습 니 다.$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <[email protected]>
Date: Tue Aug 20 15:11:49 2013 +0800
append GPL
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <[email protected]>
Date: Tue Aug 20 14:53:12 2013 +0800
add distributed
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <[email protected]>
Date: Mon Aug 19 17:51:55 2013 +0800
wrote a readme file
git log
명령 은 최근 부터 가장 먼 곳 까지 의 제출 로 그 를 보 여 줍 니 다. 우 리 는 3 번 의 제출 을 볼 수 있 습 니 다. 가장 가 까 운 것 은 append GPL
이 고, 지난번 에는 add distributed
이 며, 가장 빠 른 것 은 wrote a readme file
입 니 다. 출력 정보 가 너무 많아 서 눈 이 어 지 럽 습 니 다. --pretty=oneline
인 자 를 더 해 보 세 요.$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
우정 힌트 가 필요 한 것 은, 당신 이 본 것 과 비슷 한 것
3628164...882e1e0
은 commit id
(버 전 번호) 입 니 다. SVN 과 다 릅 니 다. Git 의 commit id
은 1, 2, 3... 증가 하 는 숫자 가 아니 라 SHA 1 이 계산 한 아주 큰 숫자 입 니 다. 16 진법 으로 표시 합 니 다. 그리고 당신 이 본 것 commit id
은 나의 것 과 다 를 것 입 니 다. 당신 의 것 을 기준 으로 합 니 다. 왜 요?commit id
이렇게 큰 숫자 로 표시 해 야 합 니까? Git 은 분포 식 버 전 관리 시스템 이기 때문에 다음 에 우 리 는 여러 사람 이 같은 버 전 라 이브 러 리 에서 일 하 는 것 을 연구 해 야 합 니 다. 만약 에 모두 가 1, 2, 3... 버 전 번호 로 한다 면 충돌 할 것 입 니 다.새 버 전 을 제출 할 때마다 Git 은 자동 으로 타임 라인 으로 연 결 됩 니 다. Git 의 역 사 를 시각 화 도구 로 살 펴 보면 과거 기록 을 제출 하 는 타임 라인 을 더 잘 볼 수 있 습 니 다.
자, 이제 타 임 머 신 을 시작 해서 readme. txt 를 이전 버 전, 즉 "add distributed" 버 전 으로 되 돌려 보 내 려 고 합 니 다. 어떻게 하 시 겠 습 니까?
먼저, Git 은 현재 버 전이 어떤 버 전인 지 알 아야 한다. Git 에서
HEAD
로 현재 버 전, 즉 최신 제출 3628164...882e1e0
(내 제출 ID 가 너 와 다 를 것 임 을 주의 하 라) 을 표시 한다. 이전 버 전 은 HEAD^
이 고 이전 버 전 은 HEAD^^
이다. 물론 100 개 버 전 으로 100 개 ^
를 쓰 는 것 은 쉽게 셀 수 없 기 때문에 쓰기 쉽다.HEAD~100
。 현재 버 전의 "append GPL" 을 이전 버 전의 "add distributed" 로 되 돌려 주 려 면
git reset
명령 을 사용 할 수 있 습 니 다.$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
--hard
매개 변 수 는 무슨 의미 가 있 습 니까? 이 다음 에 말씀 드 리 겠 습 니 다. 지금 은 안심 하고 사용 하 세 요.readme. txt 의 내용 이 버 전 인지 아 닌 지
add distributed
:$ cat readme.txt
Git is a distributed version control system.
Git is free software.
과연.
이전 버 전
wrote a readme file
으로 계속 되 돌아 갈 수 있 습 니 다. 하지만 잠시 만 요. git log
으로 현재 버 전 라 이브 러 리 의 상 태 를 다시 보 겠 습 니 다.$ git log
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <[email protected]>
Date: Tue Aug 20 14:53:12 2013 +0800
add distributed
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <[email protected]>
Date: Mon Aug 19 17:51:55 2013 +0800
wrote a readme file
최신 버 전
append GPL
은 이미 볼 수 없습니다. 마치 당신 이 21 세기 에 타 임 머 신 을 타고 19 세기 에 온 것 과 같 습 니 다. 다시 돌아 가 고 싶 어도 돌아 갈 수 없습니다. 부 으 면 어떻게 하 시 겠 습 니까?방법 은 사실 있 습 니 다. 위의 명령 행 창 이 꺼 지지 않 았 다 면 위로 찾 아 보 세 요. 찾 아 보 세 요. 그
append GPL
의 commit id
는 3628164...
이 므 로 미래 로 돌아 가 는 버 전 을 지정 할 수 있 습 니 다.$ git reset --hard 3628164
HEAD is now at 3628164 append GPL
버 전 번 호 를 다 쓸 필요 가 없습니다. 앞 자리 만 쓰 면 됩 니 다. Git 은 자동 으로 찾 습 니 다. 물론 앞 자리 만 쓸 수도 없습니다. Git 은 여러 버 전 번 호 를 찾 을 수 있 기 때문에 어느 것 인지 알 수 없습니다.
readme. txt 의 내용 을 조 심 스 레 살 펴 보 자.
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
과연 나 후 한 삼 이 다시 돌 아 왔 다.
Git 의 버 전 은 매우 빠 릅 니 다. Git 내부 에 현재 버 전 을 가리 키 는
HEAD
포인터 가 있 기 때 문 입 니 다. 버 전 을 되 돌 릴 때 Git 은 HEAD 를 가리 키 는 것 append GPL
일 뿐 입 니 다.가리 키 는 방향 으로 변경
add distributed
:그리고 작업 영역의 파일 을 업 데 이 트 했 습 니 다. 그래서
HEAD
어떤 버 전 번 호 를 가리 키 라 고 하면 현재 버 전 을 어디 에 위치 시 킵 니까?지금 당신 은 어떤 버 전 으로 되 돌아 가 컴퓨터 를 껐 습 니 다. 다음날 아침 에 후 회 했 습 니 다. 새로운 버 전 으로 복원 하려 면 어떻게 합 니까? 새로운 버 전
commit id
을 찾 지 못 하면 어떻게 합 니까?Git 에 서 는 항상 후회 하 는 약 을 먹 을 수 있 습 니 다.
$ git reset --hard HEAD^
버 전 으로 되 돌 릴 때 add distributed
으로 되 돌아 가 려 면 append GPL
commt id 를 찾 아야 합 니 다. Git 에 서 는 명령 append GPL
을 매번 기록 하 는 데 사용 합 니 다.$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
드디어 한숨 을 쉬 었 습 니 다. 두 번 째 줄 에 나타 난
git reflog
commt id 는 append GPL
입 니 다. 이제 타 임 머 신 을 타고 미래 로 돌아 갈 수 있 습 니 다.작은 매듭
이제 정리 해 보 자.
3628164
이 가리 키 는 버 전이 현재 버 전이 기 때문에 Git 은 우리 가 버 전의 역 사 를 오 가 며 명령 HEAD
을 사용 할 수 있 도록 합 니 다. git reset --hard commit_id
제출 역 사 를 확인 하여 어느 버 전 으로 되 돌아 갈 지 확인 할 수 있 습 니 다. git log
명령 의 역 사 를 살 펴 보고 미래 로 돌아 갈 버 전 을 확인 해 야 한다.