미국 사는 수스의 코딩
Git Command 취소 : Git reset 본문
Git에서 코드를 업데이트하는 과정은 아래와 같다. 이 포스팅은 이 git add | git commit | git push 과정에서 실수가 생겼을시, 어떻게 취소하는지를 배울 것이다.
- git add
- git commit -m ""
- git push
예시로, Branch에서 파일 하나를 업데이트하였다. (modified 되었다고 M이라고 적혀있다)


1. git add 취소법
코드 :
git reset HEAD <file_name>
설명 : git add test.py로 파일을 staging area로 추가시키고, git reset HEAD test.py로 파일을 working directory에 다시 되돌린다.


2. git commit 취소법
git reset 안에는 --soft & --mixed & --hard 총 3가지 방법이 있다.
2.1 git reset --soft
코드 :
git reset --soft HEAD^~1
git reset --soft "HEAD^"
설명 : git add <file_name> & git commit -m "" 후 업데이트한 내용은 local repository에 저장된다. 그걸 git reset --soft HEAD^를 이용해서 commit 전 상태인 staging area로 되돌린다. ~1의 의미는 마지막 commit을 취소한다는 뜻이다. ~2는 마지막 2개의 commit을 취소한다는 뜻이다.


2.2 git reset --mixed
코드 :
git reset --mixed HEAD^~1
git reset --mixed "HEAD^"
설명 : git reset --mixed HEAD^를 이용해서 commit 전 전 상태인 working directory로 되돌린다. (다시 commit하기 위해서는 git add부터 다시 해야 된다.)

2.3 git reset --hard
코드 :
git reset --hard HEAD^~1
git reset --hard "HEAD^"
설명 : git reset --hard HEAD^를 이용해서 완전히 업데이트 전 상태로 되돌린다. (파일을 보면, 업데이트된 부분이 전부 사라졌다)


3. git push 취소법
코드 :
git reset HEAD^~1
git push -f origin <branch name>
설명 : git reset HEAD^를 이용해서 working directory 상태로 되돌린다. 그리고 다시 새로운 업데이트를 push할때, git push -f origin test_branch로 강제로 push한다. 맨 마지막 사진을 보면 첫 번째 사진의 push "549a87b"가 존재하지 않는다. push -f로 한 "ad859fc" push가 "549a87b"를 덮어썼기 때문이다.
* 덮어씌우기하게 됨으로 전 단계의 push history가 사라지기 때문에 매우 주의해야 된다.



'Git' 카테고리의 다른 글
Git 브랜치 병합/재배치 : Git rebase (0) | 2023.03.19 |
---|---|
Git 브랜치 병합 : Git merge (0) | 2023.03.15 |
Git 커밋 취소 : Git revert 되돌리기 (0) | 2023.03.15 |
Git 명령어 정리 | 예시 (0) | 2023.03.01 |
Git 용도와 구성 설명 (0) | 2023.02.27 |