[git 교과서] 9장. 복귀(1)

Jiseon·2021년 10월 19일
0

9.1 되돌리기


9.1.1 다시 시작

깃은 기록된 커밋을 기준으로 이전 상태로 되돌릴 수 있다.

깃에서 코드 작업을 되돌리는 방법은 크게 2가지가 있다

  • reset
  • revert

<실습>
gitstudy09 폴더에 menu.html 생성 후 <ul></ul> 작성 후 저장 및 커밋

menu.html파일에 <ul>menu번호</ul> 추가 후 저장 및 커밋(1~5)




소스트리로 확인

9.2 리셋


리셋은 커밋을 기준으로 이전 코드로 되돌리는 방법이다.

9.2.1 복귀 시점

복귀는 어떤 시점으로 돌아가는 것을 의미하고 이전코드로 복귀하려면 복귀 시점을 알려 주어야 한다.
리셋은 이 커밋을 기준으로 정하고 커밋은 log 명령어로 조회할 수 있다.
$git log --online : 간략한 커밋 해시 값과 메시지가 같이 출력된다.

마지막 커밋ID인 d9a01c6에 HEAD포인터가 있다

커밋 메세지는 여러 줄로 작성할 수 잇지만 로그 기록은 그중 첫 번째 메시지만 출력합니다.
고정된 커밋 해시 값을 사용하지 않고 HEAD 포인터를 이용하여 상대적 위치를 지정할 수 있다.
캐럿(^)또는 물결(~)기호를 이용해 HEAD의 상대 커밋 위치를 지정한다.
예) $ git reset --hard HEAD^^^

9.2.2 reset 명령어

reset명령어를 사용하면 지정된 코드로 되돌아간다.
=> 특정 커밋의 해시 값 상태로 모든 코드를 복구한다.
$ git reset 옵션 커밋ID

reset 명령어의 옵션들(3가지):

  • soft : 스테이지 영역을 포함한 상태로 복원한다.
  • mixed : 기본 옵션 값이다.(default)
  • hard : 실제 파일이 삭제된 이전 상태로 복원한다.

soft옵션과 mixed옵션 차이는 스테이지 영역과 관련이 있고 hard옵션은 워킹 디렉터리와 관련이 있다.

9.2.3 soft 옵션

soft 옵션은 가장 낮은 단계의 리셋 동작이다.
$ git reset --soft HEAD~


마지막 menu5 커밋이 사라지고 커밋하지 않은 변경 사항이 보인다.

diff 명령어로 차이점 알아보기


수정된 파일은 스테이지 영역에 등록되어 있다.

soft 옵션은 지정한 커밋 위치로 복귀하고 복귀할때 스테이지 영역의 상태도 같이 복귀한다.
soft옵션은 파일을 수정하고, add명령어로 스테이지 영역에 올려 커밋을 실행하기 직전의 단계로 되돌린다.
soft 옵션은 단순히 HEAD위치를 이동하는 역할만 한다.
마치 직전의 커밋단계로 체크아웃하라는 명령과 유사하다.
reset --soft 명령어와 체크아웃 명령어는 HEAD 위치를 이동하는 점에서 동일하지만 브랜치를 변경하지 않는다는 점에서 차이가 있다.


코드 내용의 변경이 없어도 새로 커밋하면 변경된 시간 같은 값을 적용하여 해시값을 생성한다.

reset --soft 명령어의 원리를 이용하면 마지막 커밋을 수정할 수 있다.
--amend명령어와 유사하다.
$ git commit --amend

9.2.4 mixed 옵션

reset 명령어의 기본값은 mixed이다.
$ git reset --mixed 커밋ID 또는 $ git reset 커밋ID 로 작성한다.


unstaged 상태로 변경되었다고 출력된다.
mixed 옵션은 soft 옵션과 달리 리셋한 후 스테이지 상태까지 복원하지 않는다.

soft옵션은 스테이지 상태까지 복원하기 때문에 바로 commit 명령어를 실행할 수 있었다.
mixed옵션은 스테이지 상태를 제외하고 복원하기 때문에 Unstaged 상태가 되기 때문에 커밋하려면 add 명령어를 먼저 실행해 주어야 한다.


새로운 menu5가 추가되었다고 나오고 변경파일 내용은 워킹디렉터리에 저장되었다.


커밋에 실패했다는 문구가 뜬다.
mixed 옵션은 스테이지 영역을 같이 복사하지 않기 때문에 수정된 파일은 스테이지 영역이 아닌 워킹디렉터리 안에 남아있다.


처음과 동일한 상태가 되었지만 해시값은 병경되었다.

9.2.5 hard 옵션

soft 옵션과 mixed 옵션은 이전 커밋으로 되돌리는 과정에서 실제로 삭제되는 내용은 없다.
=> 워킹 디렉터리에 그대로 유지된다.
hard 옵션은 리셋되는 복귀 시점의 커밋 상태와 해당 커밋의 워킹 디렉터리까지 모두 되돌린다.
reset --hard 명령어를 사용한 커밋 이후의 모든 내용은 삭제된다.



hard 옵션을 사용하면 워킹 디렉터리 내용도 함께 삭제된다.

9.2.6 소스트리

리셋하려면 복귀 시점의 커밋 해시 값이 필요하다.
소스트리의 커밋 그래프에서 복귀할 커밋을 선택한다. 마우스 오른쪽 버튼을 눌러 이 커밋까지 현재 브랜치를 초기화 메뉴를 선택한다.
soft, mixed, hard 리셋 옵션을 선택한다.

9.2.7 커밋 합치기


9.2.8 스테이지 리셋

스테이지 영역은 커밋을 하려고 임시로 결과물을 보관해 두는 공간이다.
$ git add 파일이름 로 스테이지 영역에 등록한다.
$ git reset 파일이름로 스테이지 영역에서 등록된 파일을 다시 unstage 상태로 만든다.
파일 이름을 지정하여 리셋하면 해당파일은 unstage 상태가 되는데 이는 몇가지 옵션이 축약되어 있다.
$ git reset --mixed HEAD 파일이름 이 축약된 형태이다.

9.2.9 작업 취소

코드를 수정하는 도중 오류가 생겨 현재 작업을 모두 취소하고 싶을 수 있다.
수정 작업을 완전히 취소 하려면 워킹 디렉터리와 스테이지 상태를 모두 제거하여 마지막 커밋 상태로 되돌려 놓아야 한다.
리셋할 때의 시점을 현재 HEAD를 기준으로 하면 해당시점의 수정작업을 모두 삭제 할 수 있다.

9.2.10 병합 취소

리셋은 병합된 브랜치도 취소할 수 있다.


menu 브랜치와 master 브랜치를 병합한다.

방금 병합한 커밋을 리셋하여 취소한다.

9.2.11 주의할 점

리셋 기능을 이용하면 독립된 개임 프로젝트를 관리할 때 쉽게 이전 상태로 복귀할 수 있다.
하지만 저장소를 외부에 공개했거나 공유하고 있다면 주의해서 리셋을 사용해야한다

0개의 댓글