[Git, bash] Rest 명령어 : commit 되돌리기, commit 취소하기
Reset 명령어 정리
실수로 커밋한 뒤 재빨리 취소를 해야 할 때, 사용하면 좋다. bash를 쓰는 이유는 GUI의 대표 격인 소스 트리에서는 없다. 되돌리기 기능이 있긴 한데 조금 불안정하다. push 한 뒤에만 작동하는 듯하고 어쩔 땐 --hard 옵션으로 작동해 버려 코드가 싹 날아가버리는 참사가 다수 발생한 경험이 있어. 역시나 안전한 Command 기반으로 정리하고자 한다.
1. 직전 커밋 삭제.
방금 올린 직전 커밋을 삭제하는 방법은 "$ git reset HEAD^"로 수행할 수 있다. 여기서 "HEAD + ^"은 ^는 헤드에서 직전이라는 말이며, "^^"이면 헤드에서 2번째 전을 말한다. "HEAD^"를 사용한다는 가정하에 아래 그림 1-1, 1-2를 참고하면 된다. 이 상황의 전제는 아래 그림 1-3이어야 한다. 즉, "원격지에 push를 안 한 상태"이어야 한다. remote에 push한 경우에도 처리하는 방법은 비슷한데 아래에서 정리할 예정.
2. Mode option : "git reset [<mode>] [<commit>]"
이 명령어의 옵션은 다양한 문법이 있지만, 주로 쓰는 것들로만 간단히 정리하고자 한다. 위 syntax에서 <mode>에는 아래와 같은 옵션들을 제공한다. 주로 쓰는 것만 설명을 추가하고 자세한 것은 공식 홈페이지 참고하면 된다.
(https://git-scm.com/docs/git-reset)
- soft : 커밋을 특정하여 reset하면 삭제되는 커밋들의 변경된 파일을 working repository에 남긴다는 말이다. [그림 2-1]
- mixed : 생략하게 될 경우, 이 값으로 설정이 된다.
- hard : soft와 다르게 [그림 2-1]와 같이 남기지 않고 아예 버린다.
- merge
- keep
3. Commit option : "git reset [<mode>] [<commit>]"
정확히 말하면, commit 옵션은 아닌데 HEAD로 지칭 할 수도 있고, commit의 hash값으로 특정할 수도 있다는 것을 설명하려고 한다. 그림 3-1에서 직전 커밋이 아닌 head에서 2번째 것까지 reset을 하기 위해서는 2가지 방법이 있다. 참고로 [<mode>] 옵션은 생략 가능하며, default값은 mixted이다.
- $ git reset --soft HEAD^^^
- $ git reset --sfot 07b332d
아래의 그림 3-1, 3-2를 참고하면, 지정한 커밋까지 reset됨을 알 수 있다.
참고 :
- https://git-scm.com/docs/git-reset ("git-reset" document 공식 홈페이지)
'◽ Git' 카테고리의 다른 글
[Git] patch (타 저장소 커밋 적용) (0) | 2022.09.16 |
---|---|
[Git] ".gitignore" 적용하기 // 적용 안되는 문제 해결방법 (0) | 2022.06.12 |
[Git] cherry-pick(체리 픽) 예제, 사용 방법 정리 [패치 적용 시 사용] (0) | 2021.12.30 |
[Git] 토큰 생성 오류, 토큰 생성 방법 : "Support for password authentication was removed on August 13, 2021. Please use a personal access token instead." (0) | 2021.08.16 |
[Git] commit 기준으로 가져와서 환경 세팅하기. + branch 생성 (0) | 2021.04.12 |
[Git] 초대된 저장소(Repository)에서 탈퇴하기 ( 팀 탈퇴하기) (0) | 2020.11.27 |
[Git] git diff : 커밋과 커밋 차이 파일명 뽑아내기 [option 정리] (0) | 2020.11.16 |