(8) git 과거 버전으로 돌아가기(revert, reset)

2019. 4. 29. 21:14GIT

버전 관리중에 주요한 기능 중 하나인 과거버전으로 돌아가기에 대해 알아보겠습니다. 주록 git reset과 git revert를 통해 돌아갈 수 있는데 이 둘의 차이점은 reset은 commit의 기록을 삭제한채 되돌아가는 것이고 revert는 커밋의 기록을 유지한채 되돌아가는 것이다. 


git reset

git reset 이라는 명령어를 통해 과거의 commit기록이 남아있는 곳으로 돌아갈 수 있습니다. 

 

현재 저의 git log는 아래와 같습니다.(이전 글에서 전체 커밋을 한번 더 해줬습니다.)

저는 여기서 c34c....의 로그 기록으로 되돌아 가보겠습니다. 커밋이 기록된 곳 까지 이동할 수 있습니다. 

 

--hard 옵션사용하기

git reset c34c7f98d95529d2d62e706b8bce1965048df8be --hard

이렇게 commit id를 써도 되고 

혹은 id 대신 

HEAD~ 전단계
HEAD~2 두 커밋 전  
HEAD~3 세 커밋 전 
같이 사용 가능하다. 

위의 명령어를 통해서 과거로 되돌아 갈 수 있습니다. 

다시 git log를 쳐주면 아래와 같이 로그의 기록들이 없어진 것을 알 수 있습니다. 

hi2.txt도 없어진 모습을 알 수 있네요. 완전히 과거로 돌아왔습니다. 

그렇지만 git status를 써보면 modified와 staging에 올라온

 

--soft 

과거로 돌아간 후 staging과 modified 상황을 유지합니다. 한 단계전으로 이동한 후 f2.txt가 그대로 존재하는 것을 알 수 있습니다. 

default로 하면 --mixed와 같다.

 

mixed는 staging을 버리고 modified 상태를 계속 갖고 있는다. 

 

 

우리의 상태는 완전히 로컬입니다. 로컬상태에서는 reset을 마음대로 해주어도 상관없지만 나중에 git의 원격저장소를 사용하게되면 우리의 local 안에 있는 버전에서만 사용해주어야 합니다. 


git Revert

git revert는 reset과 달리 commit의 기록을 유지하면서 상태를 되돌릴 수 있습니다. 

 

git revert (commit id )

혹은 

git revert (HEAD~)

위를 보면 로그가 사라지지 않고 코드는 이전과 같이 변하면서 로그에 기록이 남아있는 것을 확인할 수 있다. 

 

revert vs reset 

 

만약에 나라면 둘중에 진짜 과거가 필요없다면 reset을 혹시나 몰라서 남겨나야 겠다면 revert를 사용할 것 같다. 

'GIT' 카테고리의 다른 글

(10) git branch 비교하기  (0) 2019.04.29
(9) git branch  (0) 2019.04.29
(7) git 변경사항 알아보기  (0) 2019.04.27
(6) git stage Area  (0) 2019.04.27
(5)git commit  (0) 2019.04.27