본문 바로가기
Git

[Git 깃] git reset

by 까망 하르방 2022. 7. 29.
반응형

git reset 과거 시점으로 되돌리는 방법으로

크게 3가지 옵션이 있다.

* reset 후에는 이전으로 되돌리 수 없으므로 유의해야 한다.

 

git reset {File or Commit ID}

add 된 파일을 unstaged 상태(add 하기 전)로 되돌린다.

• 변경 내역 자체는 파일에 남아 있다.

 

--soft

• Staging Area 상태로 돌린다.

    (add 한 상태이면서 commit 하기 전 상태)

 

--mixed (default)

• Wokring Directory 상태로 놓는다 

    (add 하기 전 상태)

 

--hard

• 추적(tracked) 되고 있는 파일 변경내역 삭제

• Working Directory에서 삭제하는 것으로

    파일 변경 내역을 완전히 삭제하는 것이다.

• Untracked 파일은 Untracked로 그대로 남는다.

 

 

Untracked 파일을 관리하고 싶은 경우

📌 [Git 깃] git clean

 

[Git 깃] git clean

git clean 추적중이지 않은(untracked) 파일을 삭제하는 명령어이다. ※ requireForce 설정이 true가 아니면 clean 명령은 항상 -f, -i, -n 옵션 중 하나가 명시되어야 실행된다. ※ "-f" 옵션이 "--force"로 기..

zoosso.tistory.com


 

commit 취소하고 Staged 상태(commit 전)로 되돌리기

git reset --soft HEAD^

git reset 전git reset 후

aa.cpp 와 bb.cpp 파일이 commit 된 상태였는데

    commit 하기 전 상태 (add 된 상태)로 되돌린다.

HEAD는 현재 브랜치를 가리키는 포인터이며, 

   브랜치는 브랜치에 담긴 커밋 중 가장 마지막 커밋을 가리킨다

 

 

commit 취소하고 해당 파일들은 UnStaged 상태(add 전)로 되돌리기

git reset --mixed HEAD^

git reset 전git reset 후

• [commit 파일] aa.cpp와 bb.cpp 을 포함해서

    [add 파일] cc.cpp와 dd.cpp 까지 Unstaged 상태로 돌아간 것을 확인할 수 있다.

    즉, add 된 파일도 Unstaged 상태로 같이 되돌아 간다.

• --mixed  옵션이 default 이므로 생략해도 된다.

 

commit 취소와 함께 파일 변경 내역을 모두 없애고 싶을 때

git reset --hard HEAD^

git log 결과git reset 후

 

 

commit 내역은 그대로 두면서 다른 변경 내역을 삭제하고 싶을 때

git reset --hard

 

 

마지막 2개의 commit 취소

git reset HEAD~2

git log 이력git reset 처리 후

• reset 결과 --mixed 옵션이므로

  Staging Area 상태로 돌아온 것을  확인할 수 있다.

• commit 이력도 git log 상에서 없어져 있다.

 

 

git reset 유의사항

reset을 하면 되돌리 수 없는 것도 유의해야 하지만

다른 사람과 협업 하는 경우에도 주의할 필요가 있다.

 

A commit 부터 E commit 까지

push 되어 원격 서버에 반영된 상태라고 해보자.

git push 상태

 

B commit 까지 reset --hard 하게 되었다.

git reset 후

 

로컬상에서 commit 이력이 사라졌고, 원격에는 그대로 남아 있는 상태이다.

물론 --force 옵션으로 push 가능하지만

다른 팀원이 기존 commit 받아서

이미 사용하고 있다면 문제가 발생할 수 있다.

 

📌 [Git 깃] git rebase 위험성 포스팅 내용과 유사하다.

 

[Git 깃] git rebase 위험성

Rebase 위험성 Rebase는 Merge 보다 commit history를 깔끔하게 해서 유용하지만 rebase 과정에서 생겨나는 커밋은 내용은 같지만 새로운 커밋이기에 다른 사람과 협업하는 경우 곤란해질 수 있다. [Git 깃] g

zoosso.tistory.com

 

그렇다면 이미 push 해서

원격에 반영된 commit 수정하고 싶은 경우는 어떻게 해야할까.

📌 [Git 깃] git revert

 

 

📌 Git 목록

 

[까망] Git 목록

본 블로그에 작성된 Git 관련 내용 URL을 정리한 곳입니다. 목록 [Git] "git add -p" 를 활용하는 이유 [Git] .gitignore 설정 [Git] learngitbranching 답안 및 풀이 - 1 [Git] learngitbranching 답안 및 풀이 -..

zoosso.tistory.com

반응형

'Git' 카테고리의 다른 글

💻 [Git 깃] 영역별(add, commit, push) 되돌리기  (0) 2022.08.02
[Git 깃] git revert  (0) 2022.07.31
[Git 깃] git rebase 위험성  (0) 2022.05.22
[Git 깃] git rebase  (0) 2022.05.17
[Git 깃] git config  (0) 2022.05.11

댓글