해결된 질문
작성
·
205
·
수정됨
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 인턴입니다.
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)
진행하시는 작업에 도움이 되길 바랍니다!