이전 포스팅에서는 파일을 수정만 하고, 스테이징이나 커밋을 하지 않은 경우에  다시 파일을 이전 상태로 되돌리는 방법에 대해서 다루었다. 

이번 포스팅에서는 파일을 스테이징 했을 때, 파일을 커밋했을 때 각각 어떤 방식으로 이전 파일 버전으로 되돌려야 하는지에 대해서 글을 쓸 것이다. 

 

스테이징 되돌리기 

 

이전 포스팅에서 만들었었던 alphabet.txt 파일을 vim을 통해서 기존의 내용을 삭제하고, A, B, C, D를 한줄씩 입력한다. 

$ vim alphabet.txt

수정한 내용을 저장하고 나온 뒤에 alphabet.txt를 스테이징 한다. 

$ git add alphabet.txt
$ git status

git status로 출력된 글 중에서 '(use "git restore --staged <file>..." to unstage)'라고 적혀있는 것을 확인할 수 있다. 
위의 방법으로도 스테이징한 alphabet.txt 파일을 내리는 것도 가능하고 reset HEAD라는 코드를 사용하는 것도 가능하다. 

$ git restore --staged alphabet.txt
// 혹은 
$ git reset HEAD alphabet.txt

$ git status

깃의 현재 상태를 확인해보면 스테이징 이전의 상태로 되돌아간 것을 볼 수 있다. 

 

 

커밋 되돌리기(가장 최신 버전으로)

 

이번에는 alphabet.txt를 vim을 이용하여 E까지 새로운 줄에 추가한다. 

$ vim alphabet.txt

alphabet.txt 파일은 이전에 커밋을 한 적이 있으므로, 스테이징과 커밋을 한꺼번에 할 수 있도록 해주는 옵션인 commit -am을 이용해서 바로 커밋을 한다. 커밋할 때 메모는 "message4"로 입력한다. 그 후 git log를 통해서 커밋을 확인한다. 

$ git commit -am "message4"
$ git log

(저번 포스팅에서 이야기 했지만, git log가 길어지면 q를 입력해서 나올 수 있다.)

 

 

특정 시점의 커밋으로 되돌리기 

 

최신 커밋으로 되돌리는 경우도 많지만, 특수한 시점으로 되돌아가야 하는 경우가 종종 발생한다. 
이를 위해서 새로운 텍스트 파일인 rev.txt 파일을 vim을 통해 작성한다. 내용은 a만 입력한다. 
그후 스테이징과 커밋을 진행한다. 커밋 메세지는 "R1"로 입력한다. 

$ vim rev.txt
$ git add rev.txt
$ git commit -m "R1"

rev.txt 파일에 b를 추가한 뒤 "R2"로 커밋하고, c를 추가한 뒤 "R3", d를 추가한뒤 "R4"를 추가로 커밋한다. 

$ git log

를 통해서 그동안의 커밋이 제대로 진행되었는지 확인한다. 

git log에 의해서 반환되는 내용들 중에서 각 커밋에 대한 내용을 출력할 때, commit.....으로 시작하는 노란색 줄을 볼 수 있다. commit 뒤에 숫자와 알파벳이 뒤섞인 문자열을 볼 수 있는데, 이것들이 각 커밋마다의 해시값이라고 한다. 

b를 추가하고 "R2"로 커밋했던 시점으로 되돌아가기 위해서는 R2의 해시값을 복사해서 'git reset --hard 해시값'
을 하면 가능하다. 나의 경우에는 

$ git reset --hard 171d802e792467b403ecb3cc906ddbeabf49e78c
$ git log
$ cat rev.txt

를 통해서 해당 시점으로 돌아간 것이 맞는지 확인한다. 

(reset 관련 코드에서 --hard 옵션을 주었다.  그 사이에 있는 이전 버전을 복구 할 수 없는 것을 의미한다.)

 

 

커밋을 삭제하지 않고 되돌리기 

 

위에서는 가장 최신의 커밋과 되돌아가는 시점 사이의 커밋들을 모두 삭제해야만 했다. 
하지만 이를 삭제하지 않고 남겨두기 위해서는 reset이 아닌 revert를 사용해야 한다. 

$ vim rev.txt
$ git commit -am "R5"

세번째 줄에 e를 입력하고 저장한 다음, 바로 커밋한다. 

revert를 사용할 때에는 되돌아가려는 시점의 해시값을 입력하는 것이 아니라, 
삭제하지 않고 남겨 놓을 현재 커밋의 해시값을 입력해야 한다. 

$ git revert 62d44d212acc2947dadd9ed226723bc70bd50733

코드를 실행하면 가장 위에 Revert "R5"라는 내용이 뜨는데, i를 입력하고 남겨놓은 내용을 저장할 수 있다.

$ git log를 입력하면 R5를 revert한 새로운 커밋이 생긴 것을 확인할 수 있다.

 

$ cat rev.txt

R5이전에 R2에서 a와 b가 각각 한줄씩 입력되었던 내용을 확인할 수 있다.

 

728x90
반응형

'버전 관리 > git & github' 카테고리의 다른 글

git과 브랜치 2  (0) 2021.01.13
git과 브랜치(Branch) 1  (0) 2021.01.11
git에서 커밋한 파일 확인 및 수정하기  (0) 2021.01.08
깃을 이용한 버전 관리  (0) 2021.01.06
Git & Github  (0) 2021.01.06
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기