[git] git checkouts는 실제로 무엇을 의미합니까?

checkoutgit 에는 무엇이 있습니까?

checkout특정 지점에 한 번하면 HEAD해당 지점에 대한 포인트를 알고 있습니다. 그러나 그것은 정말로 무엇을 의미합니까? 그러면 해당 지점에서 작업 할 수 있다는 의미입니까? 그렇다면 지점을 확인하지 않고 작업 할 수 없습니까?

또한 무엇을 remote checkout의미합니까? 어떻게 유용합니까?



답변

언급했듯이 HEAD커밋 트리에서 현재 위치를 나타내는 레이블입니다. 한 커밋에서 다른 커밋으로 이동할 때 함께 이동합니다. git checkout <commit>커밋 트리에서 이동하여 포커스 ( HEAD)를 지정된 커밋으로 이동하는 기본 메커니즘입니다 .

는, 해시, 지점명, 태그 이름, 상대 구 (커밋 다수의 방법 중 하나에 의해 지정 될 수 커밋 HEAD^, HEAD~1등, 등)한다. 체크 아웃이 분기를 변경하는 것으로 간주하는 것이 유용한 경우가 많으며 해당 관점에서 작동하는 몇 가지 옵션이 있지만 모두 커밋을 참조합니다.

체크 아웃하려면 커밋에 이동하는 것 외에 다른 영향이 HEAD있습니다.

  • 작업 디렉토리가 체크 아웃 된 커밋 상태로 업데이트됩니다.
  • 분기 이름이 지정된 경우 체크 아웃하면 해당 분기가 활성화됩니다. 활성 분기는 추가 된 새 커밋과 함께 이동합니다.
    • -b옵션 새로운 지점은 현재 커밋을 기반으로 생성 한 후 활성화 될 것이다.
    • --track옵션을 체크 아웃 분기 원격 지점을 인식 할 수
    • --orphan옵션 새로운 분기 (와 같이 생성된다 -b) 그러나 어떤 커밋 기존 기반으로하지 않습니다.

git checkout man-page 에서 읽을 수있는 몇 가지 옵션이 더 있습니다.이 옵션은 모두 한 커밋에서 다른 커밋으로 이동하는 것 HEAD입니다.


답변

이해에 도움이 될 수 있도록 파일, 폴더 및 브랜치로 체크 아웃하는 몇 가지 사용 사례를 설명하겠습니다.

이름이 지정된 폴더가 dev있고 index.html모든 것이 추적되고 작업 디렉토리가 깨끗 하다고 가정 해 봅시다 .

실수로 파일 이름을 변경 index.html하고 실행 취소하려면 git checkout index.html현재 선택한 분기 저장소에서 해당 파일 상태를 복구하기 만하면 됩니다.

이제 dev폴더를 변경 하고 복구하려면. 사용할 수는 git checkout dev있지만 dev해당 폴더를 확인하는 대신 이미 명명 된 분기 가 있으면 해당 분기를 끌어 내립니다. 그것을 피하기 위해 차라리하겠습니다 git checkout -- dev.

이제 맨손으로 이중 대시는 현재 분기를 나타내며 dev현재 선택된 분기의 폴더 를 git에 요청합니다 .

마찬가지로 내가하면 git checkout alpha dev알파 브랜치에서 dev 폴더를 가져옵니다.

이 답변은 첫 번째 질문 ‘git checkout really mean’입니다.


답변

“체크 아웃하려면”은 저장소에서 주어진 커밋을 가져와 작업 디렉토리에서 관련 파일 및 디렉토리 트리의 상태를 다시 만드는 것을 의미합니다.

브랜치 헤드 가 아닌 커밋 (예 :)을 체크 아웃 할 때 git checkout HEAD~2, 당신은 소위 분리 된 헤드에 있습니다. 여기서 커밋을 만들 수 있지만 다른 브랜치로 전환하면 해당 커밋은 브랜치 이름으로 복구 할 수 없으며 일정 시간이 지나면 가비지 수집기에 의해 제거 될 수도 있습니다.


답변