2014-10-06 3 views
2

Newb 질문, 나는 이것을 이해하고 싶다.git checkout이 모든 파일을 업데이트합니까?

언제 git checkout <revision>이는 그 순간의 상태로 전체 프로젝트을 반환하지, 또는 파일 만이 특정 개정 변경 다시입니까?

예 : .git repo 외에도 내 폴더가 완전히 비어 있고 I git checkout master 인 경우 결과 파일이 프로젝트 전체가 될 것인지 아니면 가장 최근 커밋으로 변경된 파일일까요?

처음부터 다양한 지점에서 프로젝트를 체크하고 있기 때문에 프로젝트가 천천히 커지기 때문에 각 체크 아웃의 크기가 상당히 다양합니다.

답변

2

언제 git checkout <revision>이는 그 순간의 상태로 전체 프로젝트를 반환 않거나은 해당 특정 개정에 변경된 파일을 다시입니까?

하여 작업 트리 준비 영역은 (물론, .git 하위 디렉토리 이외의) 완전히 비어있는 경우 당신은 다음 작업 트리와 준비 영역이 완벽하게 내용을 반영하는 것이다

git checkout <revision> 

을 실행 그 중 의 특정 개정. 당신이 git checkout을 실행할 때 작업 트리가 비어 있지 않은 경우 다른 한편으로

는 어떤 일이 훨씬 더 미묘, 3 가지 경우로 나눌 수 있습니다

  1. 체크 아웃이 아닌 문제 및 힘내입니다 눈꺼풀을 때리지 않고 수행합니다. 특정 개정판의 내용이 작업중인 트리에 복사됩니다 (필요한 경우 이미있는 내용을 덮어 씁니다). 또는
  2. 체크 아웃을 수행 한 경우 로컬 변경이 손실됩니다. 따라서 Git은 (-f 플래그를 사용하지 않았다는 가정하에) 체크 아웃을 알려주고 체크 아웃을 중단합니다. 또는
  3. 물건이 부분적으로 만 체크 아웃되고 일부 로컬 커밋되지 않은 변경 사항이 작업 트리 및/또는 색인에 유지되는보다 복잡한 상황이 발생할 수 있습니다. 그 상황에 대한 자세한 내용은 내 대답 Why are unstaged changes still present after checking out a different branch?에 나와 있습니다.

... 각각의 체크 아웃의 크기가 매우 많이 변화한다.

추적하지 않은 파일을 고려하고 계십니까? 커밋했는데 나중에 큰 파일을 제거 했습니까? 혼자서 당신의 질문에 주어진 정보에 기초하여, 우리는 크기가 많이 변하는 이유에 대해 가설을 세울 수 있습니다.

+1

설명해 주셔서 감사합니다. 나는 전체 커밋의 내용을 단순히 검색하는 것이 아니라 빈 작업 디렉토리에서 커밋 된 지점으로 전체 프로젝트를 복원하고자하는 이유를 묻습니다. 이 명령은 필자가 필요로하는 것처럼 보입니다 :'git checkout .' – user2089518

+0

@ user2089518 Cool. 현재 'git checkout'의 결과는 상황에 따라 다르다는 것을 기억하십시오. – Jubobs

1

documentation : "작업 트리에서 색인 또는 지정된 트리의 버전과 일치하도록 파일을 업데이트합니다."예제의 경우 저장소가 체크 아웃 시점의 상태로 돌아갑니다 그 전체.

그러나 Jubobs가 지적했듯이 마지막 체크 아웃 이후 저장소의 상태를 변경 한 경우 동작에 차이가 있습니다. 이 경우 그의 대답은 내 것보다 포괄적입니다.

또한 git에서 추적하는 파일에만 적용되므로 거짓말 한 다른 파일은 영향을받지 않습니다.

+0

* 저장소 전체를 체크 아웃 할 때 상태로 리포지토리를 반환합니다. * 항상 완전히 사실이 아닙니다. http://stackoverflow.com/questions/25939329/why-are-unstaged-changes-still-present-after-checking-out-a-different-branch/25940509#25940509 – Jubobs

+1

아, 좋은 지적입니다. 잊어 버렸습니다. 그 대답을 업데이 트됩니다. –

관련 문제