Git HEAD 뜻 설명 및 버 전 반환

12584 단어 CMake 명령 대전
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
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 버 전 라 이브 러 리 에 제출 하고 다시 연습 해 보 세 요. readme. txt 파일 을 수정 하 는 것 은 다음 과 같 습 니 다.
    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...882e1e0commit 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 GPLcommit id3628164... 이 므 로 미래 로 돌아 가 는 버 전 을 지정 할 수 있 습 니 다.
    $ 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 일 뿐 입 니 다.
    Git HEAD 意思详解 和版本回退_第1张图片
    가리 키 는 방향 으로 변경 add distributed:
    Git HEAD 意思详解 和版本回退_第2张图片
    그리고 작업 영역의 파일 을 업 데 이 트 했 습 니 다. 그래서 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 명령 의 역 사 를 살 펴 보고 미래 로 돌아 갈 버 전 을 확인 해 야 한다.
  • 좋은 웹페이지 즐겨찾기