git

git reset HEAD 의 hard, soft, 복합 옵션의 차이점

직장인코딩 2022. 10. 3. 21:50
반응형

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

백문이 불여일견

다시 입력을 해보겠습니다.

현재의 log

 

 

명령어 입력후 git log입니다. 당연히 한단계 이전의 commit으로 돌아갔습니다.

여기서 다른 점은

chaterTwo라는 commit의 변경내용을 지우지 않고

 

commit만 해놓지 않은 상태로 stage 상태에 둔 것입니다.

 

여기 위를 보면 스테이징된 변경사항에 있습니다.

 


git reset HEAD^

 

여기서 복합옵션을 실행해보겠습니다.

현재 git log

 

명령어를 실행시킨뒤 확인해보면

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 환경으로 돌리고 싶을때 사용하는 것입니다.

반응형