etc./StackOverFlow

Git은 rebase에서 관련 없는 기록 병합을 거부합니다.

청렴결백한 만능 재주꾼 2021. 11. 9. 00:28
반응형

질문자 :Shubham Chaudhary


git rebase origin/development 동안 Git에서 다음 오류 메시지가 표시됩니다.

 fatal: refusing to merge unrelated histories Error redoing merge 1234deadbeef1234deadbeef

내 Git 버전은 2.9.0입니다. 이전 버전에서는 잘 작동했습니다.

새 릴리스에 도입된 강제 플래그로 관련 없는 기록을 허용하는 이 리베이스를 어떻게 계속할 수 있습니까?



Git 2.9부터 기본 동작이 변경되었습니다.

"git merge"는 기본적으로 공통 기반이 없는 두 분기를 병합하는 데 사용되어 기존 프로젝트의 완전히 새로운 기록을 만든 다음 순진한 유지 관리자가 가져와 불필요한 병렬 기록을 기존 프로젝트에 병합할 수 있었습니다. . 이 명령은 기본적으로 이를 허용하지 않으며 독립적으로 시작한 두 프로젝트의 기록을 병합하는 드문 경우에 이스케이프 해치 --allow-unrelated-histories

자세한 내용은 Git 릴리스 변경 로그 를 참조하세요.

--allow-unrelated-histories 를 사용하여 강제로 병합을 수행할 수 있습니다.


blue112

제 경우에는 오류가 치명적이었습니다. 모든 시도, 특히 원격으로 Git 저장소를 추가한 후 첫 번째 pull 요청에서 fatal: refusing to merge unrelated histories

--allow-unrelated-histories 플래그를 사용하면 다음과 같은 방식으로 pull 요청이 작동합니다.

 git pull origin branchname --allow-unrelated-histories

2.9.0 릴리스 노트에 따라 - git pull git merge --allow-unrelated-histories historys 옵션을 전달하도록 학습되었습니다.


Adil

다음 명령을 시도하십시오.

 git pull origin master --allow-unrelated-histories

이렇게 하면 문제가 해결됩니다.


Ogbonna Vitalis

로컬 저장소를 먼저 설정할 때 이 오류가 발생했습니다. 그런 다음 GitHub에 가서 새 저장소를 만들었습니다. 그런 다음 나는 달렸다.

 git remote add origin <repository url>

푸시 또는 풀을 시도할 때 fatal: unrelated_histories 오류가 발생했습니다.

해결 방법은 다음과 같습니다.

 git pull origin master --allow-unrelated-histories git merge origin origin/master ... add and commit here... git push origin master

Adithya Bhat

이를 위해 다음 명령을 입력합니다.

 git pull origin branchname --allow-unrelated-histories

예를 들어,

 git pull origin master --allow-unrelated-histories

참조:

GitHub 관련 없는 기록 문제


VIKAS KOHLI

git pull origin <branch> --allow-unrelated-histories

Vim 편집 창으로 연결됩니다.

  • 커밋 메시지 삽입
  • 그런 다음 Esc ("삽입" 모드 종료)를 누른 다음 :( 콜론), x (작은 "x")를 누르고 마지막으로 Enter 키 를 눌러 Vim을 종료합니다.
  • git push --set-upstream origin <branch>

MJ Montes

이 명령을 실행하고 문제가 해결되었습니다.

 git pull origin branchName --allow-unrelated-histories

자세한 내용은 이 페이지 를 확인하세요.


jyotishman saikia

나는 같은 문제가 있었다. 이 시도:

 git pull origin master --allow-unrelated-histories git push origin master

Aamir Kalimi

1. 문제 해결

git pull origin master 수행할 때 이 오류가 발생합니까?:

 fatal: refusing to merge unrelated histories

시나리오에 따라 아래 명령 중 하나를 실행합니다(이전에는 마스터였습니다).

 git pull origin master --allow-unrelated-histories git pull origin main --allow-unrelated-histories

2. 의미

  • 오류 :

"치명적: 관련 없는 이력 병합 거부" Git 오류는 관련이 없는 두 프로젝트를 병합할 때 발생합니다(즉, 서로의 존재를 알지 못하고 커밋 이력이 일치하지 않는 프로젝트).

기본적으로 git merge 명령은 공통 조상을 공유하지 않는 기록 병합을 거부합니다. 이 옵션은 독립적으로 수명을 시작한 두 프로젝트의 기록을 병합할 때 이 안전을 무시하는 데 사용할 수 있습니다. 매우 드문 경우이므로 기본적으로 이를 활성화하는 구성 변수가 존재하지 않으며 추가되지 않습니다.

여기에 이미지 설명 입력


참고문헌


StackOverflow에 대한 추가 정보


Federico Baù

Android 스튜디오 및 IntelliJ의 경우:

먼저 모든 것을 커밋 하고 충돌을 해결하십시오.

그런 다음 IDE 아래에서 터미널을 열고 다음을 입력합니다.

 git pull origin master --allow-unrelated-histories

이제 밀 수 있습니다.


Amir Hossein Ghasemi

git pull --rebase development 시도


Daniel petrov

경고 이것은 잠재적으로 원격 저장소를 덮어쓸 것입니다

이것은 나를 위해 일했습니다.

 git push origin master --force

Aniket Patil

다른 모든 답변은 실제로 질문에 대답하지 않으므로 관련 질문에 대한 이 답변에서 영감을 얻은 솔루션이 있습니다.

git rebase 수행하는 동안 오류가 발생합니다.

 $ git rebase origin/development fatal: refusing to merge unrelated histories Error redoing merge 1234deadbeef1234deadbeef

이 오류는 실제로 rebase를 취소하지 않지만 지금은 그 중간에 있습니다.

 $ git status interactive rebase in progress; onto 4321beefdead Last command done (1 command done): pick 1234deadbeef1234deadbeef test merge commit

이제 손으로 병합을 수행할 수 있습니다. 원래 병합 커밋의 상위 커밋을 찾습니다.

 $ git log -1 1234deadbeef1234deadbeef commit 1234deadbeef1234deadbeef Merge: 111111111 222222222 Author: Hans Dampf Date: Wed Jun 6 18:04:35 2018 +0200 test merge commit

두 개의 병합 부모 중 현재 병합된 부모(아마 두 번째 부모, git log 222222222 확인)를 찾은 다음 원래 병합 커밋의 커밋 메시지를 복사하여 손으로 병합을 수행합니다.

 $ git merge --allow-unrelated 222222222 --no-commit Automatic merge went well; stopped before committing as requested $ git commit -C 1234deadbeef1234deadbeef [detached HEAD 909af09ec] test merge commit Date: Wed Jun 6 18:04:35 2018 +0200 $ git rebase --continue Successfully rebased and updated refs/heads/test-branch.

cdauth

나는 같은 문제가 있었다. 문제는 원격에 이것을 방해하는 것이 있다는 것입니다.

먼저 로컬 저장소를 만들었습니다. LICENSEREADME.md 파일을 추가하고 커밋했습니다.

그런 다음 원격 저장소가 필요하여 GitHub에 하나를 만들었습니다. 여기에서 "Initialize this repository with a README"를 선택하는 실수를 하여 원격에서도 README.md를 생성했습니다.

그래서 지금 내가 달렸을 때

 git push --set-upstream origin master

나는 얻었다:

 error: failed to push some refs to 'https://github.com/lokeshub/myTODs.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (eg hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

이제 이것을 극복하기 위해 내가 한

 git pull origin master

그 결과 아래 오류가 발생했습니다.

 From https://github.com/lokeshub/myTODs branch master -> FETCH_HEAD fatal: refusing to merge unrelated histories**

나는 시도했다:

 git pull origin master --allow-unrelated-histories

결과:

 From https://github.com/lokeshub/myTODs * branch master -> FETCH_HEAD Auto-merging README.md CONFLICT (add/add): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result.

해결책:

원격 리포지토리를 제거하고 새 리포지토리를 만들었습니다( README 파일을 제거하는 것만으로도 효과가 있을 수 있다고 생각합니다). 그 후 아래와 같이 작동했습니다.

 git remote rm origin git remote add origin https://github.com/lokeshub/myTODOs.git git push --set-upstream origin master

Lokesh Purohit

먼저 다음 명령을 사용하여 원격 변경 사항을 로컬로 가져옵니다.

 git pull origin branchname --allow-unrelated-histories

** 분기 이름은 제 경우 마스터입니다.

pull 명령이 완료되면 충돌이 발생합니다. 갈등을 해결해야 합니다. Android Studio를 사용하여 충돌을 해결합니다. 여기에 이미지 설명 입력

충돌이 해결되면 병합이 완료됩니다!

이제 안전하게 밀 수 있습니다.


oiyio

이것은 일반적으로 원격 저장소에 처음 커밋할 때 발생합니다. 오류가 "관련 없는 기록 병합을 거부함"으로 명확하게 표시되므로 --allow-unrelated-history 플래그를 사용해야 합니다.

 git pull origin master --allow-unrelated-histories

이제 수동으로 해결해야 하는 몇 가지 충돌이 있습니다. 그런 다음 코드를 커밋하고 푸시하십시오.


Santosh Kadam

git pull --allow-unrelated-histories 가 작동하지 않았지만이 문제를 해결하는 방법은 다음과 같습니다.

  1. 데스크탑 리포지토리의 모든 파일을 다른 폴더에 복사한 다음 폴더를 삭제했습니다.

  2. 그런 다음 새 프로젝트이기 때문에 repo를 다시 복제합니다.

  3. 파일을 다시 복사하고 푸시하면 매력처럼 작동했습니다.


Ustas

git pull 수행할 때 치명적이라는 메시지가 나타납니다. 잠시 동안 로컬 복사본을 업데이트하지 않은 repo 모듈에 대해 fatal: refusing to merge unrelated histories

원본에서 로컬을 새로 고치기 위해 이 명령을 실행했습니다. 나는 원격에서 최신을 원했고 로컬 변경이 필요하지 않았습니다.

 git reset --hard origin/master

이것은 제 경우에 그것을 고쳤습니다.


striker77

저도 이것 때문에 고생했지만 해결 방법을 찾았습니다.

위의 오류가 발생하면 병합 커밋을 선택하고 리베이스를 계속하십시오.

 git cherry-pick -m 1 1234deadbeef1234deadbeef git rebase --continue

el_tigro

Google 직원의 경우:

GitHub에서 새 리포지토리를 만들고 실수로 README 또는 .gitignore 파일로 초기화한 경우.

.git 폴더가 손상되어 병합하거나 리베이스할 수 없는 경우.

그 다음에:

  • 새 폴더 만들기
  • git clone
  • 모든 파일을 이 폴더에 붙여넣기

이제 로컬 및 원격에는 "관련 기록"이 있고 행복하게 병합되거나 리베이스됩니다.


dz902

allow-unrelated-histories 스위치를 토글하여 해결됩니다. git pull 또는 git merge 명령 뒤에 다음 태그를 추가합니다.

 git pull origin master --allow-unrelated-histories

그 후에 갈등이 생길 수 있습니다. 그래서 갈등을 해결하고 커밋하십시오. 그것은 나를 위해 일입니다.


Bhargav Variya

제 경우에는 관련 없는 히스토리 분기를 현재에 병합하고 싶었습니다.

 git merge <-unrelated-history-branch-name> --allow-unrelated-histories

AmerllicA

가장 많이 투표 된 답변은 리베이스의 맥락에서이 질문을 해결하지 못합니다.

두 분기된 분기를 동기화하는 유일한 방법은 다시 병합하여 추가 병합 커밋과 동일한 변경 사항을 포함하는 두 세트의 커밋(원래 분기와 리베이스된 분기의 것)을 만드는 것입니다. 말할 필요도 없이 이것은 매우 혼란스러운 상황입니다.

git rebase 를 실행하기 전에 항상 "이 브랜치를 보고 있는 다른 사람이 있습니까?"라고 자문해 보십시오. 대답이 '예'인 경우 키보드에서 손을 git revert 명령)에 대해 생각하기 시작합니다. 그렇지 않으면 원하는 만큼 기록을 다시 쓰는 것이 안전합니다.

참조: https://www.atlassian.com/git/tutorials/merging-vs-rebasing#the-golden-rule-of-rebasing


Wenfang Du

나는 몇 년 동안 rebase를 사용하고 있으며 그런 문제가 발생한 적이 없습니다. 그러나 첫 번째 문제는 origin 이라는 원격 저장소 development 에서 직접 수행하려고 한다는 것입니다. rebase는 git 기록을 재구성하는 위험한 명령이기 때문에 말 그대로 잘못된 것입니다. 즉, 먼저 로컬 저장소에서 시도하고 예상대로 작동하는 경우에만 푸시해야 합니다.

따라서 내 일반적인 rebase 워크플로는 다음과 같습니다(그러나 유일한 위원회가 아닌 분기에는 rebase를 사용해서는 안 됩니다. 이러한 분기의 경우 해당되는 경우 충돌을 병합하고 해결하기만 하면 됩니다).

  1. 깨끗한 작업 트리가 있는지 확인하십시오(커밋 변경 사항 없음).
  2. 리베이스하려는 브랜치로 체크아웃합니다(예를 들어, master 라고 가정해 보겠습니다. 한 줄 명령으로): git checkout master && git pull origin master && git checkout development
  3. 실제 rebase 수행: git rebase master
  4. 완료되고 모든 것이 예상대로 작동하면 리모컨으로 푸시합니다. 그렇게 하려면 원격 호스트가 이미 다른 순서로 기록을 가지고 있기 때문에 강제로 실행해야 합니다. 원격 호스트는 푸시할 항목 없이 응답할 것입니다. 따라서 "내 로컬 버전의 히스토리가 정확합니다. 내 로컬 버전의 히스토리를 사용하여 원격 브랜치의 모든 것을 덮어씁니다"라고 말해야 합니다. git push -f origin development

이미 언급했듯이 rebase는 git 기록을 조작한다는 것을 명심하십시오. 이는 일반적으로 나쁜 일입니다. 그러나 아무도 커밋하지 않는 지점에서 그렇게 할 수 있습니다. 다른 개발자가 분기를 풀 수 있도록 유지하려면 병합 자체, 스쿼시 또는 체리픽과 같은 다른 병합 전략을 사용하십시오. 즉, Rebase는 분산 개발 도구가 되어서는 안 됩니다. 이 저장소에서 작업하는 유일한 사람이라면 잘 작동합니다.

우리는 기능 분기 전략을 사용합니다. 여기서 나는 다른 개발자들로부터 "업데이트"를 받기 위해 보통 rebase를 사용하는데, 그 동안 마스터 브랜치에서 발생했습니다. 이렇게 하면 pull 요청에서 볼 수 있는 커밋의 크기가 줄어듭니다. 따라서 코드 검토자가 이 기능 분기에서 변경한 내용을 더 쉽게 볼 수 있습니다.


alpham8

당신은 밀거나 당기고 밀거나 병합하고 당기고 밀 수 없기 때문에 : -

  1. GitHub 리포지토리에서 새 분기를 만들 수 있습니다.
  2. 그리고: -
  3. git add .
  4. git commit -m 'commitName'
  5. 그리고 터미널의 현재 디렉토리에서 해당 분기를 참조하십시오.
  6. git branch -m master branchName
  7. git push -f origin branchName
  8. 코드가 새 분기로 푸시됩니다.
  9. 그런 다음이 두 가지를 병합 할 수 있습니다.

이것은 나를 위해 일했습니다.


Likhit Garimella

출처 : http:www.stackoverflow.com/questions/37937984/git-refusing-to-merge-unrelated-histories-on-rebase

반응형