git reset HEAD에 대해서 알고 계신가요?
일단 HEAD가 무엇일까요? git log를 터미널에 입력해서 확인해보겠습니다.
git log를 입력하게 되면
위 사진과 같이 HEAD 와 origin이 보이는데요.
간단하게 생각하면 HEAD는 여러분의 컴퓨터입니다.
컴퓨터 작업환경은 HEAD라고 생각을 하면되고
우리의 github 가 origin(원격저장소)이라고 생각하시면 편할 것 같습니다.
그럼 git reset HEAD 에서
--soft, --hard, 그리고 복합옵션의
차이점은 무엇일까요?
git reset HEAD^ ---hard
백문이 불여일견 일단
터미널에 입력을 해보겠습니다.
입력을 하기전 log입니다.
입력후 확인을 해보면 Updated origin이 사라졌습니다.
--hard는 아예 commit을 사라지게 만드는 것입니다.
HEAD^ 라는 명령어로 현재 HEAD의 위치에 한단계 이전(^ 이표시가 한단계 이전입니다. ^^ 이러면 두단계 이전이겠죠!)
의 commit으로 가면서 현재의 commit이 사라지게 됩니다.
소스 제어를 확인해보아도 git에 대한 어떠한 요구 사항이나 이런 것이 확인 되는 것이 없습니다.
git reset HEAD^ --soft
백문이 불여일견
다시 입력을 해보겠습니다.
명령어 입력후 git log입니다. 당연히 한단계 이전의 commit으로 돌아갔습니다.
여기서 다른 점은
chaterTwo라는 commit의 변경내용을 지우지 않고
commit만 해놓지 않은 상태로 stage 상태에 둔 것입니다.
여기 위를 보면 스테이징된 변경사항에 있습니다.
git reset HEAD^
여기서 복합옵션을 실행해보겠습니다.
명령어를 실행시킨뒤 확인해보면
Update README.md 에서 Create README.md
commit으로 옮겨간 것을 확인 할 수 있습니다.
여기서 차이점은.
soft옵션은 stage영역에 변경파일을 두었지만
복합옵션은 unstage 영역에 파일을 둡니다.
당연히 나중에 commit 하고 push를 할 때 git add 명령어를 실행 해주어야 겠지요!??
총 정리
git reset HEAD^ --soft : —soft 옵션은 파일들은 없어지지 않고 과거로 가는 것으로 soft옵션은 복합 옵션과는 다르게 stage영역으로 되돌립니다.
git reset HEAD^ --hard: —hard 옵션은 아예 파일들을 없얘고 과거로 돌아가는 것이고,
git reset HEAD^ (복합옵션) : 아무 옵션을 입력하지 않으면 복합 옵션으로 파일을 삭제하지는 않고
Untracked 상태로 만듭니다. 그러면 파일 목록옆에 U라고 표시가 뜰것입니다. 이것은 스테이징 되지 않은 unstage 영역으로 보내 진 것입니다.
이것은 파일 변경내용은 그대로 유지하고 싶지만 실수로 커밋을 하고 스테이징 했을때 다시 unstage 환경으로 돌리고 싶을때 사용하는 것입니다.