git reset vs git revert

지니·2022년 1월 16일
0

대학생의 일기

목록 보기
17/17

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개의 댓글