롤백을 하기 위해서는 크게 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 인자는 최대한 자제하는 것이 좋지 않을까 생각한다.
[출처]
'Git' 카테고리의 다른 글
Git과 SVN의 차이 (0) | 2024.04.23 |
---|---|
git cherry-pick 취소하는 방법 (0) | 2022.12.06 |