스택큐힙리스트

어떻게 HEAD를 이전 위치로 이동할 수 있을까요? (분리된 head) 및 커밋 취소 본문

카테고리 없음

어떻게 HEAD를 이전 위치로 이동할 수 있을까요? (분리된 head) 및 커밋 취소

스택큐힙리스트 2023. 10. 23. 23:07
반응형

Git에서 다른 브랜치를 병합하고 이전 위치로 HEAD를 재설정하여 squash commit을 수행하려고 시도했습니다.

git reset origin/master

원격 저장소의 마스터 브랜치로 git 리셋

하지만 나는 이것에서 벗어나야 해. HEAD를 이전 위치로 어떻게 이동할 수 있을까요?

저는 해당 커밋으로 이동해야 하는 SHA-1 조각 (23b6772)을 가지고 있습니다. 이 커밋으로 돌아가는 방법이 있을까요?

답변 1

답변하기 전에, 이 HEAD가 무엇인지 설명하기 위해 어떤 배경 지식을 추가해 봅시다.

먼저 HEAD는 무엇인가요?

HEAD은 현재 브랜치에서의 최신 커밋을 가리킵니다.

git worktree를 제외하고는 언제나 하나의 HEAD만 존재할 수 있습니다.

HEAD의 내용은 .git/HEAD에 저장되며 현재 커밋의 40 바이트 SHA-1 값을 포함하고 있습니다.

떨어진 HEAD

최신 커밋이 아니라면 - 즉, HEAD가 이전 커밋을 가리키는 상태를 뜻하면 이것은 detached HEAD라고합니다.

이미지

커맨드 라인에서는 현재 브랜치의 최신 상태를 가리키지 않기 때문에 브랜치 이름 대신에 SHA-1 형식으로 표시됩니다:





이미지



이미지

분리된 HEAD에서 복구하는 몇 가지 옵션:

git checkout



git checkout

git 체크아웃 <커밋 아이디>
git 체크아웃 -b <새 브랜치> <커밋 아이디>
git 체크아웃 HEAD~X // X는 되돌아갈 커밋의 수입니다.

이 명령은 원하는 커밋을 가리키는 새 브랜치를 체크아웃합니다.

이 명령은 특정 커밋으로 체크아웃합니다.

이 시점에서 브랜치를 생성하고 이 지점부터 작업을 시작할 수 있습니다.

# 특정 커밋을 체크아웃합니다.
# 이 작업은 `떨어진 HEAD`가 발생하는데, 이는 `HEAD`가 최신 버전을 가리키지 않기 때문에 코드를 업데이트하려면 브랜치를 체크아웃해야 합니다.
git checkout <커밋 아이디>
# 주어진 커밋에서 분기된 새로운 브랜치를 생성합니다.
git checkout -b <브랜치 이름>

git reflog

의 html p-태그를 한국어로 번역해주세요.

항상 reflog를 사용할 수 있습니다.

git reflogHEAD를 업데이트하는 모든 변경 사항을 표시하고 원하는 reflog 항목을 확인하면 HEAD를 해당 커밋으로 다시 설정합니다.

헤드가 수정될 때마다 reflog에 새 항목이 생성됩니다.

git reflog
git checkout HEAD@{...}

git reflog
git checkout HEAD@{...}

원하는 커밋으로 돌아갈 수 있습니다.

이미지

git reset --hard <commit_id>

요소는 다음과 같이 번역됩니다:

git reset --hard <commit_id>

HEAD를 원하는 커밋으로 이동하세요.

# 이것은 모든 로컬 수정 사항을 삭제합니다.
# 보존하려는 미완료된 작업이 있는 경우에는 수행하지 마십시오.
git reset --hard 0d1d7fc32
# 대신에, 보존해야 할 작업이 있는 경우:
git stash
git reset --hard 0d1d7fc32
git stash pop
# 이렇게 하면 수정사항을 저장한 다음, 재설정 후 패치를 다시 적용합니다.
# 재설정할 커밋으로부터 변경된 사항을 수정한 경우에는 병합 충돌이 발생할 수 있습니다.

  • 참고: (Git 2.7부터) git rebase --no-autostash도 사용할 수 있습니다.

이미지

git 복구 <sha-1>

주어진 커밋 또는 커밋 범위를 되돌리기하십시오.

되돌리기 명령은 주어진 커밋에서 이루어진 모든 변경 사항을 실행 취소합니다.

실행 취소 패치가 있는 새로운 커밋이 커밋되며 원래 커밋도 계속해서 히스토리에 남게됩니다.

# 새로운 커밋을 원본 커밋들의 되돌림으로 추가합니다.
# <sha-1>은 커밋 또는 커밋 범위가 될 수 있습니다.
git revert <sha-1>

이 스키마는 어떤 명령이 무엇을 하는지 보여줍니다.

여기에서 볼 수 있듯이, reset && checkoutHEAD을 수정합니다.

이미지

답변 2

헤드를 이전 위치로 되돌리는 방법은 무엇일까요? (빠져나간 해드) 그리고 커밋을 취소하는 방법은 무엇일까요? 이 주제에 관한 한국어 SEO (검색엔진 최적화)에 맞는 글을 작성해 드리겠습니다.
헤드는 Git 버전 관리 시스템에서 현재 작업 중인 브랜치를 가리키는 포인터입니다. 때때로 헤드가 단절된 상태가 될 수 있는데, 이것은 이전 커밋으로 되돌리고자 할 때 자주 발생합니다. 이러한 경우에 어떻게 해야 할까요? 이제 우리는 몇 가지 유용한 Git 명령어와 과정을 살펴보겠습니다.
우선, 헤드를 이전 위치로 되돌리기 위해 git reflog 명령어를 사용하여 이전 커밋 히스토리를 확인합니다. 그런 다음 헤드를 원하는 곳으로 이동시키기 위해 git checkout [커밋식별자] 명령어를 사용합니다. 예를 들어, git checkout HEAD@{2}는 헤드를 2번째 이전 커밋으로 되돌립니다.
커밋을 취소하는 것은 또 다른 중요한 문제입니다. 이전 커밋을 취소하고자 할 때 사용할 수 있는 여러 가지 방법이 있습니다. 가장 간단한 방법은 git reset 명령어를 사용하는 것입니다. git reset --hard HEAD^ 명령어를 사용하면 헤드 바로 이전 커밋으로 되돌아갈 수 있습니다. 여기서 ^ 기호는 이전 커밋을 의미합니다.
실수로 올린 커밋을 수정하고 싶은 경우에는 git commit --amend 명령어를 사용할 수 있습니다. 이 명령어를 사용하면 최신 커밋을 수정하거나, 새로운 커밋으로 대체할 수 있습니다.
또 다른 좋은 옵션은 git revert 명령어입니다. 이 명령어를 사용하면 이전 커밋을 취소하는 새로운 커밋을 만들 수 있습니다. 기존 커밋은 그대로 남아 있고, 취소된 내용을 별도의 커밋으로 기록합니다.
이렇게 하면 헤드를 이전 위치로 돌리고, 커밋을 취소하는 기본적인 방법을 익혔습니다. Git은 매우 강력한 버전 관리 도구이며, 이에 대한 이해도를 높일수록 더욱 효과적으로 작업할 수 있습니다. 이 글이 여러분에게 도움이 되기를 바랍니다.

반응형
Comments