목차
목표
- 해당 글 에서는 git add, commit, push 를 취소하는 방법을 활용 해 볼것이다.
만약 개념적인 부분을 좀 더 보고싶다면 아래의 링크들에서 확인해보세요.
- reset, revert 개념
https://lucas-owner.tistory.com/35
- git 각 기능에 대한설명
https://lucas-owner.tistory.com/29
git add 취소
- git staging area에 있는 파일을 unstaged 상태로 만드는것.
- (git add -A )혹은 (git add *) 명령어로 모든 파일들을 스테이징 했을 경우
- 특정 파일을 unstaged 상태로 만들고 싶을 경우.
- 명령어
# 파일명은 생략가능 -> 생략시 모든 파일들 unstaged
git reset HEAD [파일명]
- 위에서 볼 수 있듯. 파일명은 생략 가능하며, 생략시 모든 파일이 unstaging 처리 된다.
- 예제
1. File을 Staging 상태로 변경.
2. 모든 파일 unstaging
3. 특정 파일만 unstaging
git commit 취소
- commit 을 너무 일찍 했거나, 혹은 다른 파일들을 추가하거나 빼고 다시 커밋 해야 하는경우 많이 사용한다.
- 해당 글 에서는 push 를 안했다는 가정하에 진행됩니다. (Local Only)
# commit 취소 기본 명령어
git reset [reset 모드] [리셋시점]
- reset 모드는 생략 가능 하다. -> default = --mixed
- 리셋 시점은 HEAD 기준이 될 수 있고, 커밋 해쉬값을 통해 지정 할 수 있다.
○ 옵션
- --soft: 커밋 취소, Staging 상태 유지(add)
- --mixed: 커밋 취소, Staging 취소, local은 변경 상태로 유지 (옵션설정 없을시 default)
- --hard: 커밋취소, Staging 취소, local 변경 상태 취소
- HEAD 옵션 위의 3가지 옵션뒤에 사용한다. (--soft HEAD^)
- HEAD^ : 최신 커밋 취소
- HEAD~(수량) : 수량에 숫자를 적으면 해당 숫자만큼 최근 커밋부터 해당 숫자까지 커밋 취소.
- 간단 예제
# 1번 예제 - 가장 최근 commit 취소, 해당 파일 Staging 상태로 유지
$ git reset --soft HEAD^
# 2번 예제 - 가장 최근 commit 취소, Unstaging 상태로 변경
# Option - 기본 옵션
$ git reset --mixed HEAD^
# 2번예제와 동일 - 옵션 제거
$ git reset HEAD^
# 마지막 2개 commit 취소
$ git reset HEAD~2
# 3번 예제 - commit 취소 모든 파일 Unstaging 및 변경사항 리셋.
$ git reset --hard HEAD^
- 실습 예제 : 가장 최근 커밋 취소, Unstaging
git amend - Commit Message 변경
- Commit 은 정상적으로 되었으나, 메시지만 변경하고 싶을 경우 사용한다.
- 명령어 및 사용법
git commit --amend
- 추후 나오는 vi 편집기를 사용하여 편집 후 :wq(저장 후 종료) 하여 push.
git push 취소
- git push 취소의 경우 굉장히 위험한 작업이다. 정말 필요한 경우 사용하도록 하는게 좋다.
- 해당 명령어 사용시, local에서 변경(commit 취소)한 내용들이 원격저장소에 모두 덮어씌어지게 된다.
- 특정 시점 commit 으로 돌아가게 된다면, 이후 모든 commit들이 삭제 되게 된다.
- 기본 명령어
#1 가장 최근 commit 취소 - local
$ git reset HEAD^
#2 원하는 commit 시점으로 이동
$ git reset HEAD[숫자 혹은 ^] || $ git reset [commit Id]
#3 다시 Commit
$ git commit -m "Retry Commit and reset"
#4 원격 저장소 강제 push - 취소한 내용 push
$ git push -f
# 혹은
$ git push origin [branch명] -f
- -f 옵션은 -force 옵션과 같은 기능이며,
- 해당 브랜치에 강제로 push 한다는 옵션이다.
'Dev Tools > Git' 카테고리의 다른 글
[Git] Git (reset, revert) 정리 및 개념 (0) | 2023.02.01 |
---|---|
[Git] Local 프로젝트 GitHub(원격저장소) 연결 (0) | 2022.12.19 |
[Git] Git clone - 로컬에 프로젝트 가져오기 (2) | 2022.12.07 |
댓글