본문 바로가기

Git

reset, revert, rebase 차이

728x90

롤백을 하기 위해서는 크게 3가지 명령어가 존재한다.

- git reset

- git revert

- git rebase

 

git reset

git reset 명령어는 변경 사항을 취소하는데 사용된다.

쉽게 말해 이전 커밋으로 이동할 수 있다는 것이다.

git reset --(모드) (돌아갈 커밋)

 

 

위와 같은 형태로 사용되고 명령어의 모드 인자로는 세가지가 존재한다.

- soft : 커밋 취소, 하지만 스테이징 상태로 유지

- mixed : 커밋 취소 및 스테이징 취소, 내 로컬 변경 상태로 유지

- hard : 커밋 취소 및 스테이징 취소 및 로컬 변경 상태 취소

디폴트로 git reset 명령어는 mixed를 사용한다.

 

git revert

git revert 명령어 역시 되돌리는 작업을 수행하는데 사용된다.

reset 명령어와 비슷해 보이지만, 특정 커밋으로 돌아가기 위해 새 커밋을 수행한다는 점이 다르다.

다시 말하자면, git revert 명령어 자체가 하나의 커밋이라고 생각하면 된다.

git revert (돌아갈 커밋)

위 그림과 같이 revert를 한 커밋 역시 역사에 길이길이 남게 된다.

즉 만약 아예 커밋을 지우고 싶은 것이라면, revert는 적절하지 않다.

기존 커밋을 유지할 것인가, 말 것인가에 대해서 적절한 트레이드오프를 고려해서 활용하면 된다.

 

git rebase

git rebase는 꽤나 많은 기능을 갖고 있다.

rebase라는 것 자체는 보통 한 브랜치의 커밋들을 다른 브랜치로 합칠 때 많이 사용하는 방식이다.

하지만 해당 명령어 역시 되돌리는 작업을 수행할 수 있다.

git rebase -i (돌아가고자 하는 커밋의 직전 커밋)

git reset --hard 와 동일하게 동작한다.

커밋은 물론, 내 스테이징이나 로컬에서도 변경 사항은 사라져있다.

 

결론

커밋을 지우는데에는 위 모든 명령어를 활용할 수 있다.

rebase는 중간 커밋을 삭제할 때 용이하다고 생각이 든다.

그리고 되돌리기는 항상 신중해야 하므로, reset에서도 --hard 인자는 최대한 자제하는 것이 좋지 않을까 생각한다.

 

[출처]

https://wooogy-egg.tistory.com/85

728x90

'Git' 카테고리의 다른 글

Git과 SVN의 차이  (0) 2024.04.23
git cherry-pick 취소하는 방법  (0) 2022.12.06