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


96

checkoutgit 에는 무엇이 있습니까?

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

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


1
촬영하지 않았습니다. 예, 저는 그것이 의미하는 바에 대한 이론을 발견했습니다. 즉 HEAD 등을 가리 킵니다.하지만 "체크 아웃 코드-변경-체크인"관점에서 알고 싶습니다. 아니면 다른가요?
daehaai

25
@antonijn-질문을 검색해 보았습니다-이것은 첫 번째 결과입니다-제가 여기에 도착한 후 질문이 닫히고 모두가이 미친 태도를 보인 것을 보니 조금 슬펐습니다-저는 TFS 배경에서 왔습니다. "체크 아웃"이 GIT에서 완전히 다른 것을 의미한다고 의심하기 시작했습니다. 나는 그것이 git-land에서 무엇을 의미 하는지 알고 싶습니다 .
BrainSlugs83 2014 년

답변:


59

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

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

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

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

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


따라서 "체크 아웃"은 완전히 다른 의미로 들립니다 (어쨌든 TFS와 비교하면 TFS에 해당하는 것은 특정 "변경 집합"을 "받는"것입니다). 내가 이것을 찾아서 기쁘다! - "최신"에 대한 마법 상수가 있습니까? (TFS에서는 "T")-그러면 "HEAD"레이블을 모르고 최신 버전의 코드를 다운로드 할 수 있습니까?
BrainSlugs83 2014 년

1
브랜치에있는 경우 브랜치 이름은 해당 브랜치의 최신 커밋입니다. 브랜치에 있지 않은 경우 최신 커밋에있는 것입니다. log 명령을 사용하여 분기에 관계없이 저장소에서 가장 최근 커밋을 찾은 다음 수동으로 이동하지만 필요한 경우 자동화 할 수 있습니다.
David Culp 2014 년

마지막 단락에 대해 : git checkout <commit> <path>분기를 전환하지 않습니다.
galath 2015-07-09

귀하의 설명은 잘못되지 않았지만 매우 중요하고 잠재적으로 위험한 사용 사례를 잊었습니다 git checkout <path>.
에릭 Duminil

24

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

이름이 지정된 폴더가 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'입니다.


2
마지막 줄에이 답변은 첫 번째 질문 'git checkout really mean'입니다. 'mean'지점에서 'really'폴더를 확인하고
있습니까?

22

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.