git 배워보기 / reset

이상기·2023년 3월 23일
0

git

목록 보기
6/9

reset vs revert

만약 commit을 잘못하여 다시 돌아가야할 때가 있다. 이 경우 현재의 로그를 취소하여 과거로 돌아가기 위한 명령어에는 2가지가 있다.

  • reset : 아예 현재 로그를 지우고 과거에 내가 지정한 로그로 돌아간다. 이 때 이력은 남지 않게 된다.

  • revert : 현재의 로그는 냅둔 후, 과거로 돌아간다는 로그를 남기고 과거의 시점으로 돌아간다. 이 경우 로그 상에는 과거로 돌아갔다는 내용이 남게 된다.

reset

git reset을 한다 가정하자
git log 를 입력하면 아래처럼 나온다.

commit ea6b406f8016e9d639dcbd72c5268c8c1ed54835 (HEAD -> master)
Author: 이름 메일
Date:   Wed Mar 22 16:44:41 2023 +0900

    f3 내용변경

commit e9fa643bc5a31f315789fa61d3c5e435cec14725
Author: 이름 메일
Date:   Wed Mar 22 16:42:25 2023 +0900

    f2txt의 복사본 파일 업로드

commit 5924d6adb4554dee66e01840664a15ca27e08ec3
Author: 이름 메일
Date:   Tue Mar 21 18:28:20 2023 +0900

    두 번째 버전 생성 및 f2.txt 생성

여기서 내가 중간 커밋으로 이동하고 싶어한다 가정하자. 이 떄 내가 만약 중간 커밋 값을 입력하여 reset을 하였다면 어디부터 잘려서 나오는가?

정답은 내가 지정한 커밋이 가장 최신이 된다.

그 이후의 커밋들은 전부 날라가며 이력 또한 존재하지 않게된다.
아래는 해당 커밋 명령어를 사용한 것이다

git reset e9fa643bc5a31f315789fa61d3c5e435cec14725
Unstaged changes after reset:
M       f1.txt
M       f3_f2copy,txt

$ git log
commit e9fa643bc5a31f315789fa61d3c5e435cec14725 (HEAD -> master)
Author: 이름 메일
Date:   Wed Mar 22 16:42:25 2023 +0900

    f2txt의 복사본 파일 업로드

commit 5924d6adb4554dee66e01840664a15ca27e08ec3
Author: 이름 메일
Date:   Tue Mar 21 18:28:20 2023 +0900

    두 번째 버전 생성 및 f2.txt 생성

commit 540fc6247133259b10e466e760cc6c8c40952d63
Author: 이름 메일
Date:   Tue Mar 21 18:24:24 2023 +0900

    두 번쨰 버전 실행

commit 700e946b928b587b4202794583cb7dec89eecde2
Author: 이름 메일
Date:   Tue Mar 21 17:43:20 2023 +0900

    최초 버전 생성

여기서 이력이 사라진것처럼 보이지만 실제로는 남아있다. git 자체에선 삭제하는 경우가 흔치 않다.

그럼 복구가 가능한가?

git의 원리를 알아야 가능하다.

주의점. 만약 나중에 원격 리포지토리에 공유를 할 시 reset은 반드시 피해야하는 사항이다.

git reset options

reset에는 옵션이 3가지가 있다.
이 옵션들을 잘 쓰면 더 안전하게 git의 사용이 가능하다.

  • soft : HEAD가 가리키는 브랜치를 옮긴다. (변경사항은 유지, staged 상태로 만듦)

  • mixed(default) : Index를 HEAD가 가리키는 상태로 만든다. (변경사항은 유지, unstaged 상태로 만듦)

  • hard : 워킹 디렉토리를 Index의 상태로 만든다.(변경사항 없어짐)

profile
DBA가 되고싶은 사람입니다

0개의 댓글