GIT

reset 과 revert

Strickland 2024. 4. 26. 11:06
  • reset : 원하는 시점으로 돌아간 뒤 이후 내역들을 지웁니다.
  • revert : 되돌리기 원하는 시점의 커밋을 거꾸로 실행합니다.

revert 는 특정 시점의 커밋 내용만 선택적으로 취소해야 하는 경우에 사용한다.

 

 

reset 을 사용해서 과거로 돌아가기

되돌아갈 시점 "Add team cheetas"의 커밋 해시 복사 

git reset --hard (돌아갈 커밋 해시)

 

 

뒤에 커밋 해쉬가 없으면 마지막 커밋으로 돌아감 

git reset --hard

 

 

revert 를 사용해서 과거로 돌아가기 

 

현재 git log 는 아래와 같다.

 

만약 아래의 명령어를 실행한다면 무슨일이 일어날까? 

git revert f7e6f0

"Replace Lions with Leopards" 의 수정내역을 취소하고 commit 까지 같이 하겠다는 명령어이다.

실행해보겠다.

 

 

Bash  에 다음과 같은 화면이 뜬다.

 

이 화면의 의미는 "Replace Lions with Leopards" 를 reverting 하는데 문제가 발생했다는 것이다.

또한 명령어 입력 라인 위에 (main | REVERTING) 으로 바뀐것을 볼 수 있다 .

 

 

문제가 생긴 이유는 다음과 같다.

1. "Replace Lions with Leopards" 에서 진행했던 작업은 Lion 파일을 삭제하고 Leopards 파일을 추가했다

2. "Replace Lions with Leopards" 에서 진행했던 작업을 취소한다면 Lion 파일이 다시 생기고 Leopards 파일이 사라질 것이다.

3. 하지만 이후 커밋들에서 나는 Leopards 파일을 수정한 적이있다.

4. 그래서 git 이 나에게 아래와 같이 물어보는 거다

"Leopards 파일을 없애려고 보니까 너가 이전에 몇번 수정했었어. 그래서 함부로 지울수가 없어."

 

이를 해결하기 위한 명령어는 다음과 같다.

git rm leopards.yaml    -> leopards 파일을 그냥 삭제할게
git revert --continue   -> 리버팅을 계속 진행해줘
커밋 메시지 저장

 

 

git revert 명령어는 자동으로 commit 까지 해주는기능을 포함하고 있다. 

하지만 특정 시점의 작업 내용 + 추가적인 작업을 같이 묶어서 commit 하고 싶으면 어떻게 해야할까?

아래 명령어를 보자

git revert --no-commit (되돌릴  커밋 해시)

이 명령어는 특정 시점의 작업내용을 git stage 에 올려두기만 한다 

 

방금 revert 했던 내역들을 reset 으로 모두 지우고 다시 "Replace Lions with Leopards"로 위의

명령어를 적용해 보겠다.

 

현재 git log 는 다음과 같다.

다음의 명령어를 실행해주겠다

git revert --no-commit f7e6f
git status

"Replace Lions with Leopards" 에서 진행했던 작업인 lion 파일 삭제 Leopards 파일 추가 작업이 

revert 되어 현재 변경사항에 포함되어 있지만 아직 commit 은 되지 않았다 ! 

여기서 내가 하고자 하는 추가적인 작업을 진행한 후 commit 하면 된다.

 

만약 leopards.yml 파일을 삭제하지 않고 그대로 두고싶다면 

add leopards.yaml 명령어를 실행하고 git commit 하면 된다.

 

 

 

'GIT' 카테고리의 다른 글

충돌 해결  (1) 2024.04.28
merge 와 rebase  (0) 2024.04.28
commit + diff  (0) 2024.04.25
.gitignore 형식  (0) 2024.04.25
Git 설정 & 프로젝트 관리  (0) 2024.04.25