[Git] 4) 커밋이력 되돌리기 - reset
이전 게시물
https://haaland09009.tistory.com/39
[Git] 3) Git을 원격저장소에 업로드하기
이전 게시물 https://haaland09009.tistory.com/38 [Git] git add . 이전 게시물 https://haaland09009.tistory.com/24 [Git] git 설정 및 기초 명령어 바탕화면 → 'course' 폴더 생성 → 'git' 하위폴더 생성 git 폴더에 마우스
haaland09009.tistory.com
git 명령어(local repository)
reset : 커밋 이력을 되돌리는 작업
git reset --hard HEAD^ : 커밋을 한 단계 앞으로 되돌린다
Working Directory, Staging area, Repository의 커밋이력이 한 단계 되돌려진다. (모두 초기화)
git reset --mixed HEAD^ : 커밋을 한 단계 앞으로 되돌린다 (Working Directory는 유지)
Working Directory는 보존, Staging area와 Repository의 커밋 이력이 한 단계 되돌려진다.
현재 작업하고 있던 작업물은 그대로 남아있다. Staging area에 올려두었던 작업물과 커밋 이력이 지워진다.
git reset --soft HEAD^: 커밋을 한 단계 앞으로 되돌린다
Working Directory, Staging area는 보존되지만 Repository의 커밋이력이 한 단계 되돌려진다.
^의 의미: ^의 개수에 따라 이력은 몇 단계 되돌릴 것인지 달라진다.
기본 옵션은 reset --mixed 모드이다.
git reset --hard
실습
1) test01 폴더에 존재하는 작업물들을 모두 삭제한다.


2) 새 파일 생성 → 문서 작성 후 저장

3) 현재 폴더에서 git bash 클릭

4) 1)번에서 깃 폴더를 삭제하였으므로 git init부터 작성

5) 파일을 Staging area에 올리는 작업을 하고 commit을 수행한다.

현재 상태

6) 두번째 파일 생성

7) 두번째 파일도 Staging area에 업로드하고 commit을 수행한다.

8) git log : 커밋 결과 확인

현재 상태

9) 첫번째 파일(t01.txt) 수정 후 저장

9) 수정한 파일은 Staging area로 업로드한다. commit을 하지 않고 일단 그대로 남겨둔다.

현재 상태

10) 첫번째 파일 다시 수정하기 (Working Directory가 수정된 상태로 남아있게 된다.)

현재 상태

11) 상태 확인

현재 상태

12) git reset --hard HEAD^ 수행
(--뒤에는 옵션, hard모드로 사용하겠다는 의미, ^는 commit 단계를 몇 단계 되돌릴 것인지에 대한 의미)

수행 결과


마지막에 저장했던 커밋 이력 (Repository 부분)이 지워지고, Staging area, Working Directory에 올라갔던
이력이 지워진다.
최근에 마지막으로 저장했던 기존 이력으로 되돌아가고 싶을 때, hard 모드를 사용한다.
13) git log : 이력 확인

첫번 째 이력만 남아있는 것을 확인할 수 있다.
git reset --mixed
1) 두번째 파일(t02.txt)을 생성하여 작성 후 저장한다.



2) Staging area에 업로드하고 commit 수행 (add → commit, commit하면 repository에 업로드된다.)

3) Staging area에 업로드할 파일(staging.txt) 생성하고 작성 후 저장


4) 위 파일을 commit까지는 하지 않고 Staging area에 업로드하기 (git add . )

Staging area에 업로드된 것을 확인할 수 있다.
("Changes to be committed" : commit할 수 있는 상태, 즉 Staged 상태)
5) Working Directory에서 수정 작업을 할 파일 하나를 남겨둔다.
(t01.txt 파일을 열어 문서 수정 후 저장한다.)
이후, 상태를 확인한다. (git status)


6) git reset --mixed HEAD^ 입력 (commit을 한 단계 되돌리겠다는 의미) 후 이력 (git log) 확인

7) 이력 확인 (git status 입력)

두번째 second commit의 이력이 지워진 것을 확인할 수 있다.
second commit이 지워지고, Staging area에 있는 이력도 지워졌다.
즉, git reset --mixed는
1. commit을 취소하고
2. 해당 파일들을 unstaged 상태로
3. Working Directory는 보존

8) git status 확인 → 중간에 올려놓은 작업물들은 지워졌으나 작성하고 있는 Working Directory에 있는 파일(t01.txt)은 사라지지 않았다는 것을 확인할 수 있다.

git reset --soft
: 마지막 commit 이력만 지워지고 나머지는 모두 남아있다.
1) 모든 파일 지우기


2) 새 파일을 생성하고 아래와 같이 내용 작성 후 저장

3) 현재 위치에서 git bash 클릭 → git init → git add . → commit
첫번째 파일을 commit

4) 두번째 파일(t02.txt)을 생성하고 아래와 같이 내용 작성 후 저장

5) 두번째 파일 commit 수행

6) Staging area에 업로드 할 파일 만들기
첫번째 파일(t01.txt)에 아무 내용이나 작성하기

7) 수정한 첫번째 파일을 Staging area에 업로드하기

8) 첫번째 파일에 내용 다시 한 번 추가하기

8) git reset --soft HEAD^ 수행

즉, git reset --soft는
1. commit을 취소하고
2. 해당 파일들을 staged 상태로
3. Working Directory에 보존한다.

마지막의 commit 이력만 삭제된다고 생각하면 된다.