2013-08-28 4 views
3

맨손으로 Repo에 merge을 넣을 수없는 이유는 무엇입니까? Bare repos에는 HEAD 또는 작업중인 트리가 없습니다. 구성 파일에서 우리는 bare=true을 볼 수 있습니다.맨손으로 병합 할 수없는 이유는 무엇입니까?

베어 메크에 pull을 넣을 수 없습니다 (pull = fetch & 병합 및 병합이 작동하지 않기 때문에). 그러나, 당신은 베어 repo에 밀어 수 있습니다 - 왜? 내가 아는 한 push에도 병합이 포함되어 있지만이 경우에는 잘 처리 할 수 ​​있습니다.

그래서 "어떻게 병사가 병합합니까?"라는 질문을 할 수 있습니다. HEAD이 필요한 이유는 무엇입니까? 병합 할 때 무엇을하고 있습니까?

+1

푸시가 대상 repo에서 병합을 수행하지 않습니다. 빨리 감기 병합은 실제 병합이 아니지만 브랜치 헤드를 다른 곳으로 이동시킵니다. – Chronial

답변

1

As Chronial points out 푸시는 빨리 감기 병합 또는 강제 업데이트를 수행하여 참조/분기 포인터를 다른 커밋으로 이동시킵니다.

실제로 빠른 전진 병합에서는 해결해야 할 충돌이있는 경우 작업 복사본이 필요합니다. 이전에 다른 스택 오버플로 사용자에 의해 언급되었습니다. 예를 들어, this answer (강조 광산)를 참조하십시오 :

자식은 작업 트리의 모든 병합-Y 작업 (실제 병합, 체리 픽, rebases, 패치 응용 프로그램)을 수행한다. 이 작업은 지식의 Jakub Narębski의 답변 중 하나를 예를 들어, 몇 시간 전에 언급된다 (또는 리베이스) 작업 디렉토리를 접촉 (인덱스)없이 작업 할 수 병합 방법이 없다

,이 할 수있는 작업 디렉토리 (및/또는 색인)을 사용하여 해결해야하는 충돌을 병합하십시오.

+0

맞습니까? git을 병합 할 때 먼저 데이터베이스를 찾습니다. Git은 해시를 비교합니다 (다른 파일 인 경우 2 개의 파일의 스냅 샷을 압축하여 내부에서 비교합니다). 왜 git이 데이터베이스에서 커밋 된 두 개의 분기를 병합하려면 작업 디렉토리가 필요합니까? –

+0

두 번째 발언과 질문. 우리가 병합 할 때 - 처음에는 무슨 일을합니까? 해시를 비교하려고하지만 해시를 비교하려고합니까? 현재 브랜치와 브랜치 병합의 해시. 우리가 맨손으로 repo에 끌 때 git는 무엇을합니까? 자식은 현재 브런치의 해시를 찾으려고 노력한다. (마스터 브런치가있는 베어 레코에서도), 마지막으로 사용 된 (HEAD) 커밋 된 해시를 찾기 위해 마스터의 HEAD를 찾는다. 그러나 베어 레포에는 HEAD가 없다.). 그래서 오류가 발생합니다. 사실입니까? 제발, 저를 시정하십시오. –

관련 문제