• 카테고리

    질문 & 답변
  • 세부 분야

    개발 도구

  • 해결 여부

    해결됨

reset에서 head

24.02.14 02:28 작성 24.02.14 17:12 수정 조회수 112

0

처음 head 개념을 설명해주신 코드 쳐보면서 얼추 개념을 알았다고 생각했는데 "추가자료 diff&revert" 부분을 보며 뭔가 잘못 이해한것 같아 질문드립니다.

 

commit을 5번 했다고 할때

가장 최근에 한 commit을 삭제하려면

git reset head^

위 명령어를 쳐야 가장 최근 커밋(5번째 커밋)이 제거되던데 왜 그런건가요??

가장 최근 commit이 head라면

git reset head 를 입력했을때 5번째 커밋이 지워져야 하는거 아닌가요??

 

테스트해본 내용 추가)

첫번째 커밋 3.txt (내용:1)

두번째 커밋 3.txt (내용:2)

세번째 커밋 3.txt (내용:3)

git reset --hard head

명령어 입력시 내용이 3에서 2로 바뀌여야 하는데 그대로 3이고 git log를 찍어봐도 마지막 commit이 그대로 있습니다.

 

반면

git reset --hard head^

명령어 입력시 내용이 3에서 2로 바뀌고 git log를 찍어보면 마지막 commit이 사라집니다.

 

*diff와 revert는 설명해주신대로 잘 작동하는데 reset만 이러하네요ㅠㅠ

답변 1

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.16

안녕하세요, 인프런 AI 인턴입니다.

Git에서 HEAD는 현재 작업 중인 최신 커밋을 가리키는 포인터입니다. 따라서 git reset head 를 사용하면 현재 위치를 변경하지 않고 HEAD가 가리키는 커밋을 유지하게 됩니다. 반면 git reset head^ (또는 git reset HEAD~1) 를 사용하면 HEAD의 바로 이전 커밋, 즉 최신 커밋에서 한 단계 뒤로 돌아가는 것을 의미하여 최근 커밋을 제거할 수 있게 됩니다.

git reset --hard 옵션을 사용할 때, head를 사용하면 아무 변화가 없지만 head^를 사용하면 마지막 커밋이 제거되면서 워킹 디렉토리의 파일들도 이전 커밋 상태로 되돌아가게 됩니다. 여기서 --hard 옵션은 인덱스와 워킹 디렉토리 모두를 리셋 상태로 만들어 버린다는 것을 의미합니다.

이해를 돕기 위해 다음과 같은 예를 들 수 있습니다:
- git reset HEAD : 현재 커밋(HEAD)을 유지하면서 리셋 실행 (변경 사항 없음)
- git reset HEAD^ : 마지막 커밋을 없애고, 그 이전 커밋(HEAD^)으로 리셋을 실행

더 자세한 내용이나 궁금한 점이 있으시다면, Git 관련 문서를 참고하시는 것도 좋습니다. 예를 들어 Spring Boot 공식 문서에서는 다양한 ‘How-to’ 가이드를 제공하고 있으며, 필요하다면 Stack Overflow 같은 커뮤니티 사이트에서 질문을 검색하거나 새롭게 질문을 올릴 수도 있습니다. (출처: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto)

진행하시는 작업에 도움이 되길 바랍니다!