Git으로 형상관리를 하다보면 특정 커밋까지 롤백해야 하는 경우가 빈번하다.
Git의 Reset과 Revert 명령어에 대한 정확한 이해를 돕기 위해 설명해본다.
reset VS revert
- reset 커밋 이력(history) 남기지 않고 특정 커밋까지 되돌린다.
- revert 커밋 이력을 남기고 특정 커밋까지 되돌린다.
reset
롤백 히스토리를 남기지 않고 커밋을 삭제한다.
이 경우는 혼자만 사용하는 리포지토리이거나 또는 팀 작업을 할 경우 다른 팀원이 롤백할 커밋을 pull로 당겨가지 않았다는 것을 확인한 경
우에만 사용 한다.
- --hard 옵션을 사용하면 돌아간 커밋 이후의 변경 이력은 모두 삭제합니다.
$ git log --abbrev-commit
commit 95b3fcdf3ee1b245d7b1bc0ffea904d27179970d (HEAD -> develop, origin/develop)
Author: naya <kerias@naver.com>
Date: Tue Jan 18 16:31:19 2022 +0900
dev-2.txt
commit 0940b73618337fa5052bfc999c7a2c1de1bd5b54
Author: naya <kerias@naver.com>
Date: Tue Jan 18 16:30:53 2022 +0900
dev-1.txt add
commit de5c78e9a083c1e316e51320a1ddaf7f57cccc6b
Author: naya <kerias@naver.com>
Date: Tue Jan 18 16:30:22 2022 +0900
정리2
commit eba87339a01da3e7ceb6ba45ff3c77d1f7c493cf
Merge: e9d7d13 e2e63ea
Author: naya <kerias@naver.com>
Date: Tue Jan 18 16:29:53 2022 +0900
dev-1.txt add 까지 되돌릴려면
$ git reset --hard {해시값}
$ git reset --hard 0940b73618337fa5052bfc999c7a2c1de1bd5b54
$ git push -f origin develop
또한 되돌린후 remote 에 push 할때 오류 발생하면
! [remote rejected] develop -> develop (pre-receive hook declined)
error: failed to push some refs to
브랜치 생성 시 main 브랜치가 Protected branches로 설정되어 Developer는 push를 할 수 없었습니다.
중요도에 따라서 Maintainer가 처리하거나, Developer가 직접 할 수 있도록 권한 설정을 할 수 있습니다. 저는 혼자 사용하는 git이기 때문에 Protected branch를 사용하지 않도록 변경하였습니다.
GitLab의 Project에서 Settings -> Protected branches로 들어가시면 다음과 같이 권한을 변경하거나 사용하지 않도록 변경할 수 있습니다.
revert
로그 확인
$ git log --abbrev-commit
commit b5b6da9 (HEAD -> develop, origin/develop)
Author: kilkil <aa@aa.com>
Date: Mon Jan 24 14:04:13 2022 +0900
6.txt add
commit 196940d
Author: kilkil <aa@aa.com>
Date: Mon Jan 24 14:02:11 2022 +0900
5.txt add
commit 0e0d10f
Author: kilkil <aa@aa.com>
Date: Mon Jan 24 14:01:51 2022 +0900
4.txt add
commit dc8b3c5
Author: kilkil <aa@aa.com>
Date: Mon Jan 24 13:55:52 2022 +0900
3.txt add
commit 4ef6017
Author: kilkil <aa@aa.com>
Date: Mon Jan 24 13:44:28 2022 +0900
Revert "4.txt add"
This reverts commit ed4a6bd4b85261e4e1335836cc1c30f4b0411943.
commit 35ec412
Author: kilkil <aa@aa.com>
6.txt add
5.txt add
4.txt add
위 커밋 되돌리기
dc8b3c5 : 3.txt add
b5b6da9 : 가장최근 6.txt add
$ git revert --no-commit dc8b3c5..b5b6da9
6.txt 5.txt 4.txt 삭제됨
$ ls -al
$ git commit -m "6,5,4 revert"
$ git push
merge 되돌리는 방법
git log 에서 머지 부분을 찾는다.
$ git log --abbrev-commit
...
...
commit 972660ba12cdd5d4031a0c9246f8c90eac82c4ab
Merge: f013a88 54bf62e
Author:
Date: Tue Jan 18 16:48:28 2022 +0900
Merge branch 'master' into develop
...
$ git show 972660ba12cdd5d4031a0c9246f8c90eac82c4ab
commit 972660ba12cdd5d4031a0c9246f8c90eac82c4ab
Merge: f013a88 54bf62e
Author:
Date: Tue Jan 18 16:48:28 2022 +0900
Merge branch 'master' into develop
Merge 두개가 보인다.
Merge: f013a88 54bf62e
972660ba12cdd5d4031a0c9246f8c90eac82c4ab 커밋은 f013a88 커밋과 54bf62e 커밋을 머지한 커밋입니다.
이러한 커밋을 머지(Merge) 커밋이라고 부르는데, 이런 커밋을 되돌릴 때는 어느 쪽 커밋으로 되돌릴 지 지정해주어야합니다.
이 때 사용하는 옵션이 바로 m 옵션입니다.
git revert -m 1 972660ba12cdd5d4031a0c9246f8c90eac82c4ab
git revert -m 2 972660ba12cdd5d4031a0c9246f8c90eac82c4ab
예를 들어 f013a88 커밋으로 되돌리려면 -m 1, 54bf62e 커밋으로 되돌리려면 -m 2를 지정해주면 됩니다
(git show에서 보여지는 Merge: 뒤의 값들에 차례대로 번호가 부여됩니다).
'인프라' 카테고리의 다른 글
mac iterm2 secureCert 처럼 사용하기 profiles 자동로그인 (0) | 2023.02.07 |
---|---|
mysqldump 스크립트 (암호없이) (0) | 2022.01.20 |
centos 톰캣 설치후 여러계정에서 시작/재시작 가능 (0) | 2022.01.07 |
centos 일반계정으로 sudo 사용 방법 (0) | 2022.01.07 |
centos7 python3 pip3 오프라인 설치 (yumdownloder 사용) (0) | 2021.12.07 |