Git에서 헤드 다시 연결

Abdul Jabbar 2022년8월23일
Git에서 헤드 다시 연결

Git 리포지토리는 개체 및 참조 그룹으로 정의할 수 있습니다. 분기는 작업을 표시하는 데 사용하는 개체입니다. Git은 또한 특정 분기의 커밋을 참조하는 태그도 처리합니다.

커밋은 특정 시점에 사용된 소스 코드의 상태일 가능성이 높습니다. commit은 부모와 Git, 그리고 커밋을 만든 사람과 만든 시기에 대한 전체 데이터로 구성됩니다. Commits는 분기의 개체로 저장소에 배치됩니다.

HEAD 참조는 현재 분기의 최신 마지막 커밋을 가리킵니다. HEAD 포인터는 현재 체크아웃된 분기에 대한 참조이며 분기의 상단을 가리킵니다.

그러나 지점을 확인하지 않고 시간을 되돌릴 수 있습니다. HEAD 포인터를 사용하여 분기의 커밋을 가져온 다음 인덱스를 사용하여 파일의 모든 버전을 쉽게 가져올 수 있습니다.

HEAD 포인터와 인덱스 포인터를 사용하여 Git에서 분리된 HEAD 상태라고 하는 특정 커밋에 대한 체크아웃을 수행할 수 있습니다. 또한 특정 커밋을 체크아웃하고 브랜치의 특정 커밋을 기반으로 새 브랜치를 생성할 수 있습니다.

블루문에서 한 번만 하면 문제가 되지 않습니다. 그러나 우리가 그것을 많이 반복한다면, 우리는 곧 우리가 작업하고 있던 그 브랜치로 돌아가는 방법을 궁금해하기 시작할 것입니다.

솔루션은 매우 간단합니다. 브랜치를 체크아웃하기 전에 git checkout master 명령을 사용해야 합니다. 이 명령은 커밋이 완료되기 전에 작업 중이던 분기로 돌아가지만 체크아웃 중인 커밋에는 영향을 미치지 않습니다.

깨끗한 솔루션은 패치 시리즈를 보관하는 데 전념하는 새로운 Git 리포지토리를 설정하고 다른 사람들이 언제든지 최신 분기를 가져올 수 있도록 하는 것입니다.

이러한 상황은 분리된 HEAD를 구현하는 데 따른 유용성과 성능 비용이 이점을 능가할 정도로 드물기 때문에 현재 Git에는 이 기능이 없습니다. Git은 커밋을 수정할 수 있습니다. 그러나 분리된 HEAD의 마지막 커밋을 수정하는 것은 불가능합니다.

Git은 비밀 브랜치를 생성하고 해당 브랜치에 커밋 데이터를 기록한 다음 HEAD에서 영구적으로 커밋을 삭제하여 커밋을 영구적으로 삭제하는 방법이 있습니다. 그러나 이 기능은 HEAD에서 단일 커밋이 분리된 동안에만 사용할 수 있습니다. 커밋에 부모가 여러 개인 경우 해당 분기에서 삭제할 수 없습니다.

Git에서 분리된 헤드

그러나 다른 지점으로 전환하면 상황이 달라집니다. 작업 디렉토리를 체크아웃하면 HEAD로 업데이트되고 더 이상 그 안에 있는 파일을 수정할 수 없으며, 전환한 분기와 충돌하지 않는 경우 새 변경 사항을 생성할 수 있습니다.

이 경우 HEAD는 현재 분기에서 분리됩니다. 동시에 git checkout 명령을 사용하여 작업 디렉토리를 HEAD로 업데이트하지 않고 분기를 변경할 수 있으므로 HEAD가 첨부됨과 동시에 분리될 수 있습니다.

상당히 혼란스럽긴 하지만 작업 디렉토리를 빠르게 건드리지 않고 브랜치 사이를 전환하거나 다른 브랜치로 전환하면서 동시에 새 작업 디렉토리를 체크아웃하려는 경우 유용할 수 있습니다. 이를 위해 git checkout -b <newbranchname> <commit>을 사용할 수 있습니다.

우리는 이렇게 할 수 있습니다. 우리가 원하는 지점을 확인하십시오.

$ git checkout <branch>

예를 들어:

$ git checkout master

작업 중인 변경 사항을 유지하려면 새 분기를 만들거나 변경 사항을 분기에 숨겨야 합니다. 우리 브랜치 중 하나의 이름이 될 수 없는 최근 커밋의 모든 체크아웃은 분리된 HEAD를 제공합니다.

HEAD가 분리되면 명명된 분기가 업데이트되지 않는 것을 제외하고 커밋이 정상적으로 보입니다. 알 수 없는 가지와 같습니다. 예를 들어 원격 브랜치를 먼저 추적하기 전에 체크아웃하면 다음과 같이 말할 수 있습니다. 결국 우리는 분리된 HEAD로 끝날 것입니다.

작가: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

관련 문장 - Git Head