최근에 commit 한 것들이 잘못되어서
특정 commit으로 되돌아가려면 어떻게 해야 할까?
원하는 이전 버전(commit)으로 되돌아가는 방법은
reset과 revert 두 가지 방법이 존재한다.
1. reset
원하는 버전(commit)인 commit3으로 돌아간 다음 이후의 commit들을 지워준다.
reset의 특징은 돌아간 다음 그 이후의 commit들의 내역이 없어져서 무엇을 했었는지 볼 수가 없다.
reset 명령어
git reset --hard (돌아갈 커밋 해시)
git reset --hard 8a4e6728123b9b440864b523021726025c9187fa
+ reset의 세 가지 옵션
git reset --soft ("되돌아갈 커밋의 해시")
git reset --mixed ("되돌아갈 커밋의 해시")
git reset --hard ("되돌아갈 커밋의 해시")
- soft : repository에서 staging area로 되돌리기 (이동)
repository에서 그냥 커밋하기 직전인 staging area로 되돌리기만 한다.
- mixed (reset의 기본 값) : repository에서 working directory로 되돌리기 (이동)
repository에서 커밋 + add를 하기 전인 working directory로 되돌리기만 한다.
- hard : 수정 사항을 완전히 되돌리기 (삭제)
수정했던 상항들을 수정하기 전으로 되돌린다.
간단하게 이전 커밋 상태로 되돌린다.
+ 만약 staging area에서 되돌리려면?
staging area(add가 된 상태)에서 다시 working directory(add 하기 전)로 되돌리는 명령어
git restore --staged (파일명)
git restore --staged hello.txt
수정한 내용은 그대로 가지고 있다.
staging area에서 이전 커밋 상태로 되돌리는 명령어 (만약 새로운 파일이었으면 삭제된다.)
git restore (파일명)
git restore hello.txt
즉, working directory에 있기 전으로 되돌린다.
(이전에 커밋한 내역이 있으면 해당 커밋 상태로 되돌리고 / 새로 만든 파일이였으면 다시 삭제한다.)
2. revert
commit3 부터 commit5까지 있었던 수정, 추가, 삭제 등을 역순으로 되돌려서
현재 코드 상태를 commit3 때의 코드 상태와 동일하게 만든 다음 새로 commit을 해준다.
즉 commit6과 commit3은 동일한 상태가 된다.
revert의 특징은 돌아가기 이전의 commit을 삭제하지 않았기 때문에 무엇을 했는지 확인할 수 있다.
revert 명령어
git revert (되돌릴 커밋 해시)
git revert 97cb1de39f8876648b8f7b559f53240a8f3262f4
revert는 reset과는 다르게 새로 커밋을 하는 것으로 [git commit]을 했던 것처럼 vi모드로 이동해서 커밋 메시지를 작성해야 한다.
그리고 revert를 하는 과정이 역순으로 하는 거다 보니까 충돌이 일어날 수 있다.
컴퓨터는 revert 하던 중간에 멈추고 어떤들이 충돌하고 있는지 알려준다.
충돌 내역들을 보고 사용자가 직접 파일을 수정하던 삭제하던 해결한 다음
충돌을 해결했다는 명령어를 작성해주면 컴퓨터는 이어서 revert 수행하게 된다.
충돌 해결했다고 컴퓨터에게 알려주는 명령어 (충돌 해결했으니 이어서 revert 하라는 명령어)
git revert --continue
그러면 이어서 vi모드로 이동한 다음 commit 메시지를 확인 및 작성하고 저장해서 vi모드를 나오면 된다.
+ 커밋하지 않고 revert 하기
원래 revert는 현재 코드 내용들을 원하는 커밋 상태의 코드 내용들로 되돌린 다음 커밋을 수행하는데
원하는 커밋 상태의 코드 내용들로 되돌리기만 하고 커밋은 하지 않는다.
주로 되돌린 다음 추가로 다른 작업도 같이 한 다음에 커밋을 하고 싶을 때 사용한다.
커밋하지 않고 revert하는 명령어
git revert --no-commit (되돌릴 커밋 해시)
만약 되돌리기 전으로 다시 돌아가고 싶다면 최근 커밋 상태로 이동하는 명령어를 사용한다.
git reset --hard
참고 및 출처
'Git & GitHub' 카테고리의 다른 글
branch 생성, 이동, 조회, 수정, 삭제하는 명령어 (0) | 2023.12.18 |
---|---|
git으로 관리하고 있는 프로젝트 내용을 commit하기 (0) | 2023.12.18 |
git에서 내부적인 상태와 파일들의 상태를 확인하는 명령어들 (0) | 2023.12.10 |
git의 동작 구조 (0) | 2023.12.07 |
git의 관리에서 제외하기 [.gitignore] (0) | 2023.12.07 |