일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- Vue
- node
- dict
- docker
- async
- 채팅
- merge
- wetube
- SAA
- git
- MongoDB
- AWS
- flask
- crud
- NeXT
- react
- 카톡
- S3
- socket io
- TypeScript
- SSA
- EC2
- lambda
- 중급파이썬
- Props
- pandas
- Class
- RDS
- 튜플
- Today
- Total
초보 개발자
2 - 4 특정 커밋으로 되돌리기 본문
특정 커밋으로 되돌리기 - git reset 커밋 해시
깃에는 파일을 수정하고 커밋할 때마다 저장된 버전들이 쌓여있다. 앞에서 살펴본 git reset HEAD^ 명령으로 최신 커밋을 되돌릴 수도 있지만 특정 버전으로 되돌린 다음 그 이후 버전을 삭제할 수도 있다.
git reset 명령을 연습해보기 위해 몇 개의 커밋을 만들어 보자
vim rev.txt
a라고 적어 준 뒤
git add rev.txt
git commit -m "R1"
vim rev.txt
한번 더 수정하여 'b'를 추가하고 'R2'메시지와 함께 커밋해보자
git commit -am "R2"
같은 방법으로 rev.txt에 'c'를 추가한 후 'R3'메시지와 함께 커밋하고 ... 'R4'까지 4번의 커밋을 해주자
4개의 커밋이 있고 각 커밋마다 커밋 해시가 함께 나타나 있다. 여기에서 R4메시지가 있는 커밋을 R4커밋
R3메시지가 있는 커밋을 R3커밋으로 부르겠다. R2라는 메시지가 붙은 커밋으로 되돌려 보겠다.
즉 R2커밋을 최신 커밋으로 만들겠다.
reset에서 커밋 해시를 사용해 되돌릴 때 주의사항이 있다예를 들어 reset A를 입력 한다면 이 명령은 최근 커밋을 A로 리셋한다.
즉 A커밋을 삭제하는 것이 아니라 A 커밋 이후에 만들었던 커밋을 삭제하고 A커밋으로 이동하겠다는 의미
R2커밋의 해시를 복사한 뒤 --hard 옵션까지 주어 reset해보자 git log를 해보면
R2커밋이 최신 커밋이 되어있는 것을 확인할 수 있다. 여기서 또 하나
R2에서는 'a,b'라고 적혀 있을 것이다. 과연 파일까지 되돌려졌을까?
그렇다 --hard 옵션을 주었기 때문이다. 따라서 git status를 해봤을 때도 Changes not staged for commit: 문구 또한 보이지 않을 것이다.
커밋 삭제하지 않고 되돌리기 - git revert
커밋으로 되돌릴 때 수정했던 것을 삭제해도 된다면 git reset 명령을 사용하면 되지만, 나중에 사용할 지도 모른다면 최소한 커밋을 남겨 두어야 할 때가 있다. 이 때는 git reset이 아닌 git revert를 사용한다.
rev.txt에는 'a,b'가 있을 것이다. 'e'를 추가하여 보자
vim rev.txt
git commit -am "R5"
최신 커밋이 R5으로 변한 것을 확인할 수 있을 것이다.
가장 최근에 커밋한 R5커밋을 취소하고 직전인 R2로 되돌아 가려고 한다. 앞서 배운 reset의 경우에는 reset명령 뒤에 R2의 커밋 해시를 지정했지만, revert명령의 경우에는 revert 명령 뒤에 취소하려고하는 버전, 즉 R5의 커밋 해시를 지정해야 한다.
revert 명령을 실행할 때에 자동으로 커밋메시지를 입력할 수 있는 편집기가 나타난다. 어떤 버전을 revert했는지 나타나있다. 추가로 남겨둘 내용이 있다면 입력하고 저장하자.
git log
로그에 R5를 revert한 새로운 커밋이 생겼다. 그리고 기존의 R5역시 사라지지 않았다. R5 버전을 지우는 대신 R5에서 변경했던 이력을 취소한 새 커밋을 만든 것이다.
방금 취소한 R5커밋은 rev.txt문서에 영문자 'e'를 추가한 것이었다. R5커밋을 취소한 것이 문서에도 반영이 되었는지 확인해 보자.
cat rev.txt
앞서 추가했던 'e'가 사라진 것을 볼 수 있다. 이렇게 revert명령을 사용하면 버전에 있던 이력을 취소할 수 있다.
'깃 & 깃허브' 카테고리의 다른 글
3 - 2 브랜치 기능 및 사용 병합 1 (0) | 2021.09.14 |
---|---|
3 - 1 깃과 브랜치 (0) | 2021.09.14 |
2 - 3 작업 되돌리기 (0) | 2021.09.13 |
2 - 2 깃 버전과 상태 (0) | 2021.09.13 |
2 - 1 깃 저장소 만들기 (add, commit) (0) | 2021.09.13 |