Git 명령어 - reset, revert 개념 및 정리
- git 을 사용하다 보면 다양한 상황이 발생하는데, 그중에서는 정말 무시무시한 일이 발생 할 수도 있다.
예를 들자면, RollBack을 해야 한다거나, Conflict 가 났다거나.. 혹은 Commit 을 취소하고 싶다거나
이럴때 사용하는 git 명령어인 reset, revert의 개념에 대해 알아 보자!
git reset : 커밋 취소
- reset 명령어는 대표적으로 커밋을 취소하는 명령어이다, 또한 Staging(스테이징) 취소 가능하다.
옵션에 따라 디테일한 설정을 할 수 있다.
- 옵션을 적지 않고 - git reset 할 경우 스테이징 취소.
○ 옵션
- --soft: 커밋 취소, Staging 상태 유지(add)
- --mixed: 커밋 취소, Staging 취소, local은 변경 상태로 유지 (옵션설정 없을시 default)
- --hard: 커밋취소, Staging 취소, local 변경 상태 취소
- HEAD 옵션 위의 3가지 옵션뒤에 사용한다. (--soft HEAD^)
- HEAD^ : 최신 커밋 취소
- HEAD~(수량) : 수량에 숫자를 적으면 해당 숫자만큼 최근 커밋부터 해당 숫자까지 커밋 취소.
* hard 옵션의 경우. IDE에서 (HEAD Revision, Reset Head)으로 표현된다.
즉 최초 상태로 돌아가는것이다.
○ 시나리오 - 사용 예시 상황
- code 변경 후 커밋, 커밋을 취소하고 파일을 추가하여 Commit 해야 하는 경우. (--mixed 사용)
- code 변경 후 커밋, Commit 내용이 Error가 발생하여 커밋전으로 돌아가야하는경우. (--hard 사용)
- code 변경 후 add, 스테이징을 취소해야 하는경우. (--mixed)
- git add (스테이징) 후, unStaged 상태로 되돌리고 싶을 경우 (git reset)
- 특정 파일만 unstaged 상태로 만들때 (git reset [파일경로])
○ git Reset 예시.
# git reset --(모드) (돌아갈 커밋{hash})
git reset --mixed e5843d0
○ reset 상황별 예시.
# soft - Staging 되어 있음.
git reset --soft e58c212
git cmommit -m "re Commit"
git push
# mixed - Staging 취소.
git reset --mixed e58c212
git add -A
git commit -m "re commit 2"
git push
# hard - 모든 커밋 이력 삭제.
git commit -m "1"
git commit -m "2"
git commit -m "3"
git reset --hard (1번 커밋)
git push
- 상황별 reset 사용법이다. 주의해야 할 것은 --hard 옵션이다.
- 1번 커밋으로 reset 하면 2,3 번 커밋 이력이 삭제된다.
- mixed, soft는 변경 이력 즉 커밋은 삭제되지만, 변경된 code의 내용은 남아있게 된다.
*** 주의
- 만약 협업을 하고 있다면, reset 후 push 는 하면 안되는 행동이다. 저장소에 push 하면 에러가 나지만,
--force 옵션으로 강제로 덮게 된다면 reset 된 커밋으로 덮어지기 때문이다.
git revert : 커밋 내용 되돌리기
- revert 명령어는 특정 커밋이력으로 되돌리기 위해서 사용된다.
하지만 revert 했다는 이력또한 커밋으로 남게 된다.
커밋을 삭제하고 돌아가고싶다면 revert 명령어는 적절하지 못하다.
○ git revert 예시
git revert ec12e5w
- git revert [커밋아이디]
- vim 상에 내용 편집 (스킵 가능) esc -> :wq
- git push 하면 revert 적용.
정리 (reset, revert)
- 언제 reset, revert 를 사용해야 할까 ?
- 되돌려야 할 commit이 local 에만 존재할 경우 - reset
reset 명령어는 해당 커밋을 삭제, 커밋 기록을 변경하는 작업이다.
그렇기 때문에 협업을 하고 있다면 (협업 하는 branch 에 reset 할 경우)
팀원이 push 할때 충돌이 발생하게 된다.
- 되돌려야 할 commit이 push 된 경우 - revert
revert 명령어는 해당 commit 을 취소하고 취소 commit 을 새로 남긴다.
즉 이미 존재하는 커밋의 기록을 덮어쓰지 않기 때문에, 협업을 할 경우 해당 명령어를 사용하여
되돌리는것이 좋은 전략이다.
'Dev Tools > Git' 카테고리의 다른 글
[Git] git add, commit, push 취소, (amend, commit message 변경) (2) | 2023.02.02 |
---|---|
[Git] Local 프로젝트 GitHub(원격저장소) 연결 (0) | 2022.12.19 |
[Git] Git clone - 로컬에 프로젝트 가져오기 (2) | 2022.12.07 |
댓글