Github 리포지토리에서 파일을 가져 오려고 시도하는 경우 : "관련되지 않은 기록을 병합하지 않음"


151

나는 자식을 배우고 있으며 Git 커뮤니티 책을 따르고 있습니다.

이전에 (오래 전에) Github에서 일부 파일과 함께 공용 저장소를 만들었습니다. 이제 현재 컴퓨터에 로컬 Git 저장소를 설정하고 일부 파일을 커밋했습니다. 그런 다음 Github 페이지를 가리키는 리모컨을 추가했습니다.

[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C

그것은 성공한 것처럼 보였다 :

[root@osboxes c]# git remote show learnc
* remote learnc
  Fetch URL: https://github.com/michaelklachko/Learning-C
  Push  URL: https://github.com/michaelklachko/Learning-C
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (local out of date)

이제 Github 저장소에서 컴퓨터로 파일을 다운로드하고 싶습니다. 나는 이걸했다:

[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.

그러나 로컬 디렉토리에 새 파일이 표시되지 않습니다. 어떻게 구할 수 있습니까?

나는 또한 이것을 시도했다.

[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

BTW, 로컬 마스터 지점에 있습니다 (다른 지점은 없습니다) :

[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean

4
로컬 리포지토리를 설정할 때 Github 리포지토리를 복제 했 git init습니까? 아니면 방금 했 습니까? 후자의 경우 해당 저장소는 관련이 없으며 (공통 커밋이 없음) 병합 할 수 없습니다 (풀은 가져 오기 + 병합).
Paul

나는 자식을 초기화했다. 이 문제를 해결하려면 Github 저장소를 복제해야합니까?
MichaelSB

1
Github 저장소를 복제하여 계속 사용할 수 있지만 여전히 별도의 저장소입니다. 두 개의 관련되지 않은 기록을 병합 하시겠습니까?
Paul

나는 역사를 병합하고 싶지만 실제로는 로컬 및 github 모두에서 파일을 결합하고 싶습니다. 나는 Github에있는 오래된 파일의 역사에 대해 정말로 신경 쓰지 않는다는 것을 의미합니다.
MichaelSB

답변:


315

시험 --allow-unrelated-histories

max630이 댓글을 달거나 여기에 설명 된 것처럼 Git은 관련이없는 내역을 병합하는 것을 거부합니다.



항상 이것을 설정하는 구성 옵션이없는 이유는 무엇입니까? 이 옵션을 찾아야 할 때마다; 나는 2k8부터 git과 함께 일하고이 베이비 시터에 완전히 짜증이납니다. 바보 같은 옵션이 항상있는 것은 아닙니다. 거부 메시지에는 최소한 재정의가 포함되어야합니다.
nyov

98
git checkout master
git merge origin/master --allow-unrelated-histories

충돌을 해결 한 다음

git add -A .
git commit -m "Upload"
git push

1
위의 솔루션을 설명해 주셔서 감사합니다.
Rahul Raj

39

나는 사람들의 작업 문제를 차단 해제하기 위해 노력하고 있지만 "push --force"또는 "--allow_unrelated_histories"는 새로운 사용자에게 일반적인 솔루션으로 가르쳐서는 안된다고 생각합니다. 왜 일이 제대로 이루어지지 않는지 이해할 수 없습니다.

로컬 리포지토리로 시작한 상황이 있고 GitHub에서 원격으로 작업을 공유하려는 경우주의해야 할 사항이 있습니다.

새 온라인 저장소를 작성할 때 "README를 사용하여이 저장소를 초기화하십시오"옵션이 있습니다. 작은 글씨를 읽으면 "기존 리포지토리를 가져 오는 경우이 단계를 건너 뛰십시오"라고 표시됩니다.

해당 상자를 선택했을 수 있습니다. 또는 마찬가지로 초기 푸시를 시도하기 전에 온라인으로 추가 / 커밋을 수행했습니다. 무슨 일이 일어나는지는 각 장소마다 고유 한 커밋 히스토리를 생성하며 Nevermore의 답변에 언급 된 특별한 수당이 없으면 조정할 수 없습니다 (git은 그런 식으로 조작하기를 원하지 않기 때문에). 여기에 언급 된 조언 중 일부를 따를 수 있습니다. 또는 다음에 일부 로컬 파일을 새로운 리모컨에 연결할 때 해당 옵션을 선택하지 마십시오. 초기 푸시를 위해 리모콘을 깨끗하게 유지하십시오.

참고 : git + hub에 대한 나의 첫 경험은이 같은 문제에 부딪 히고 일어난 일과 이유를 이해하기 위해 많은 학습을하는 것입니다.


12

한쪽 끝에 상당한 히스토리가없는 경우 (일명 github 쪽의 단일 readme 커밋 인 경우) readme를 로컬 리포지토리에 수동으로 복사하고 git push -f내 버전을 새로운 루트 커밋으로 만드는 것이 더 쉽다는 것을 종종 발견합니다. .

나는 약간 덜 복잡하고 모호한 플래그를 기억할 필요가 없으며 역사를 조금 더 깨끗하게 유지합니다.


11

지점에서 마스터라고 말하고 관련이없는 내역을 가져 와서 허용

git pull origin master --allow-unrelated-histories

나를 위해 일했다.


1
이 명령은 Github에서 오리진 저장소를 만들 때 라이센스 또는 ReadMe를 추가하는 데 동의해야합니다.
F1Linux

4

다음 명령을 실행하십시오.

git pull origin master --allow-unrelated-histories

병합 vim이 열립니다. 병합 메시지를 추가하고 다음을 수행하십시오.

  1. Esc 키를 누릅니다
  2. Shift + ';'을 누릅니다.
  3. 'w'를 누른 다음 'q'를 누르십시오.

그리고 당신은 갈 수 있습니다.


3

를 사용할 --allow-unrelated-histories때이 명령이 너무 많은 충돌을 생성했습니다. 내가 작업하지 않은 파일에 충돌이있었습니다. 오류를 극복하기 위해 " Refusing to merge unrelated histories"다음 rebase 명령을 사용했습니다.

git pull --rebase=preserve --allow-unrelated-histories

이 커밋 후에는 커밋 메시지와 함께 커밋되지 않은 변경 사항이 적용됩니다. 마지막으로 다음 명령을 실행하십시오.

git rebase --continue

그 후, 작업 사본이 원격 사본으로 최신 상태였으며 이전과 같이 변경 사항을 적용 할 수있었습니다. 당기는 동안 더 이상 관련이없는 이력 오류가 없습니다.


1
실제 버전 : git pull --rebase=merge --allow-unrelated-histories--rebase=preserve사용되지 않습니다 git-scm.com/docs/git-pull#Documentation/...
Luckylooke

0

필자의 경우 동일한 문제, 특히 Git 리포지토리를 원격으로 추가 한 후 첫 번째 풀 요청이 발생했습니다. 다음 오류가 발생했습니다.

fatal: refusing to merge unrelated histories on every try

--allow-unrelated-histories 명령을 사용하십시오. 완벽하게 작동합니다.

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