git reset과 git revert 둘 다 결과적으로는 되돌릴 때 사용하는 것이지만 둘 사이에는 차이가 있다. 이제부터 이 둘의 차이를 알아볼 예정이다.





I. git reset

git reset은 좀 전의 commit 내역에 남기지 않고 좀 전의 commit을 취소하고 싶을 때 사용한다.

현재 commit 이력은 다음과 같다.

모두 a.txt를 가지고 있으며 각 commit의 a.txt 내용은 아래와 같다.
a : -1
b : 1
c : 0


각각의 옵션을 붙여 b로 돌아갔을 때 무슨 일이 발생할지 알아볼 것이다.

참고로, repository, staging area, working directory가 무엇인지는 여기에서 따로 기재하지 않을 예정이다.

git reset에는 세 가지 옵션이 있다. --hard, --mixed, --soft가 있는데 각각을 붙였을 때 어떤 일이 일어나는지 살펴보자.



1. git reset --hard

git reset --hard를 사용하면 repository, staging area, working directory 모두 b의 상태로 돌아가게 된다.

git reset 6872413 --hard

  • 일단 확실히 repository는 b의 상태로 돌아갔을 것이다.
  • cat a.txt로 확인했을 때, -1을 출력하는 것을 볼 수 있고 working directory는 b의 상태로 돌아갔음을 알 수 있다.
    (c의 상태였다면 0을 출력했을 것이다.)
  • git status로 확인했을 때, nothing to commit, working tree clean이라는 문구를 볼 수 있다. 즉, staging area 또한 b의 상태로 돌아갔음을 알 수 있다.


2. git reset --mixed

git reset 6872413 --mixed

  • 일단 확실히 repository는 b의 상태로 돌아갔을 것이다.
  • cat a.txt로 확인했을 때, 그대로 0을 출력하는 것으로 보아 working directory 또한 c의 상태에 머물러있음을 알 수 있다.
  • git status로 확인했을 때, a.txt가 modified가 되었으며 빨간색이므로 staging area는 b의 상태로 돌아갔음을 알 수 있다.

참고로 reset시 어떤 옵션도 주지 않게 되면 --mixed가 default다.



3. git reset --soft

git reset 6872413 --soft

  • 일단 확실히 repository는 b의 상태로 돌아갔을 것이다.
  • cat a.txt로 확인했을 때, 그대로 0을 출력하는 것으로 보아 working directory 또한 c의 상태에 머물러있음을 알 수 있다.
  • git status로 확인했을 때, a.txt가 modified가 되었으며 초록색이므로 staging area는 c의 상태에 머물러있음을 알 수 있다.


4. 정리 표

reopsitorystaging areaworking directory
hardbbb
mixedbbc
softbcc




II. git revert

git revert는 결과적으로 봤을 때 이전 상태로 되돌리는 것을 의미하는 것은 맞지만, 되돌린 내역까지 기록으로 남게 된다.

git revert 4aadc32

이렇게 새로운 commit이 남게 되고,

결과적으로 봤을 때, c의 상태를 revert 하였으니 a.txt 파일에는 -1이 남게 된다.





학과에서 프로젝트를 할 때는 변경사항을 되돌릴 때 무조건 revert 것 같다(사실 아무것도 모르고 git desktop을 사용했기에... 뭔지도 모르고 일단 쓴게 저거다...). 실무에서는 git을 끼고 살아야 하니 열심히 따라가는 중이다!

profile
Coding Duck

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN