기본 재배치에 관련 없는 기록 병합을 거부하는 Git
때git rebase origin/development
Git에서 다음 오류 메시지가 표시됩니다.
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
내 Git 버전은 2.9.0입니다.이전 버전에서는 잘 작동했습니다.
새 릴리스에 도입된 강제 플래그와 관련 없는 기록을 허용하는 이 기본 재배치를 계속하려면 어떻게 해야 합니까?
사용할 수 있습니다.--allow-unrelated-histories
강제로 병합을 수행합니다.
Git 2.9 이후 기본 동작이 변경되었기 때문입니다.
"git merge"는 기본적으로 공통 기반이 없는 두 분기를 병합하는 데 사용되며, 이로 인해 기존 프로젝트의 새로운 기록이 생성된 다음 의심할 여지 없이 유지 관리자에 의해 풀링되므로 불필요한 병렬 기록이 기존 프로젝트에 병합될 수 있습니다.기본적으로 이스케이프 해치가 있는 경우 이를 허용하지 않도록 명령이 학습되었습니다.
--allow-unrelated-histories
독립적으로 시작한 두 프로젝트의 기록을 병합하는 드문 경우에 사용할 수 있는 옵션입니다.
자세한 내용은 Git 릴리스 변경 로그를 참조하십시오.
자세한 내용은 이 답변에서 확인할 수 있습니다.
의 경우,는 단지 저의경, 그는오단입니다.fatal: refusing to merge unrelated histories
모든 시도, 특히 Git 저장소를 원격으로 추가한 후의 첫 번째 꺼내기 요청.
--allow-unrelated-histories
과 같은했습니다.
git pull origin branchname --allow-unrelated-histories
2.9.0 릴리즈 노트에 따름 -git pull
를 통과하는 방법을 배웠습니다.--allow-unrelated-histories
초에대한에 옵션git merge
다음 명령을 사용해 보십시오.
git pull origin master --allow-unrelated-histories
이것으로 당신의 문제가 해결될 것입니다.
로컬 리포지토리를 처음 설정할 때 이 오류가 발생했습니다.그런 다음 깃허브에 가서 새로운 저장소를 만들었습니다.그때 나는 달렸습니다.
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
이 경우 다음 명령을 입력합니다.
git pull origin branchname --allow-unrelated-histories
예를들면,
git pull origin master --allow-unrelated-histories
참조:
문제를 해결합니다.
다음을 수행할 때 오류를 따릅니다.git pull origin master
:
fatal: refusing to merge unrelated histories
다음 명령 중 하나를 실행합니다.
# It could be master
git pull origin master --allow-unrelated-histories
# Or main
git pull origin main --allow-unrelated-histories
# Or just try with origin
git pull origin main --allow-unrelated-histories
나노 에디터가 열리면 저장하고 +로 닫기만 하면 됩니다.
이제 로컬에서 변경 사항을 적용합니다.
git push
의미
- 오류:
"치명적: 관련 없는 기록 병합 거부" Git 오류는 관련이 없는 두 프로젝트가 병합될 때 발생합니다(즉, 서로의 존재를 인식하지 못하고 일치하지 않는 커밋 기록이 있는 프로젝트).
get-merge 명령(GitHub 설명서 참조): --allow-unrelated-histories:
--허용 가능성이 있는 독자
기본적으로 git merge 명령은 공통 조상을 공유하지 않는 기록의 병합을 거부합니다.이 옵션은 독립적으로 수명을 시작한 두 프로젝트의 기록을 병합할 때 이 안전을 재정의하는 데 사용할 수 있습니다.매우 드문 경우이기 때문에 기본적으로 이를 사용하도록 설정하는 구성 변수가 없으며 추가되지 않습니다.
레퍼런스
- 권장: "치명적: 관련 없는 기록 병합 거부" Git 오류
- Git 2.9 릴리스 정보
스택 오버플로에 대한 추가 정보
- 권장 --allow-unrelated-histories 사용에 대한 훌륭한 설명 및 경고: 복구된 리포지토리로 풀링하는 동안 "관련 없는 기록 병합 거부" 실패
- 만약 --allow-unrelated-histories가 작동하지 않는 경우: Git 리모컨을 추가한 후 "fatal: 관련 없는 기록 병합 거부"
- Git가 관련 없는 기록의 병합을 거부하고 있습니다.'관련 없는 역사'란 무엇입니까?
- 이 사용자는 GitHub Desktop을 사용합니다.GitHub에 프로젝트를 업로드할 때 "관련 없는 기록 병합 거부"를 어떻게 수정할 수 있습니까?
- Git이 치명적인 오류와 함께 실패했습니다. 관련 없는 기록을 Gitpush와 병합하기를 거부했습니다.
이 명령을 실행하여 문제가 해결되었습니다.
git pull origin branchName --allow-unrelated-histories
자세한 내용은 이 페이지를 확인하십시오.
저도 같은 문제가 있었습니다.사용해 보십시오.
git pull origin master --allow-unrelated-histories
git push origin master
ㅠㅠgit pull --rebase development
Android Studio 및 IntelliJ의 경우:
먼저 모든 것을 커밋하고 충돌을 해결합니다.
그런 다음 IDE 아래에서 터미널을 열고 다음을 입력합니다.
git pull origin master --allow-unrelated-histories
이제 밀어도 됩니다.
다른 모든 대답은 실제로 질문에 답하지 않기 때문에, 여기 관련 질문에 대한 이 대답에서 영감을 얻은 해결책이 있습니다.
그래서 당신은 당신의 실수를 합니다.git rebase
:
$ git rebase origin/development
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
이 오류가 실제로 기본 재배치를 취소하지는 않지만, 지금은 그 중에 있습니다.
$ 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
를 클릭한 후 merge으로 수행합니다.
$ 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.
경고:원격 리포지토리를 덮어쓸 수 있습니다.
이것은 저에게 효과가 있었습니다.
git push origin master --force
먼저 다음 명령을 사용하여 원격 변경사항을 로컬로 풀링합니다.
git pull origin branchname --allow-unrelated-histories
제 경우에는 지점 이름이 마스터입니다.
pull 명령이 완료되면 충돌이 발생합니다.당신은 갈등을 해결해야 합니다.저는 안드로이드 스튜디오를 사용하여 갈등을 해결합니다.
충돌이 해결되면 병합이 완료됩니다!
이제 안전하게 밀 수 있습니다.
저도 같은 문제가 있었습니다.문제는 이것을 방지하는 무언가가 있었다는 것입니다.
처음에 로컬 리포지토리를 만들었습니다.추가했습니다.LICENSE
그리고.README.md
내 지역에 파일을 보내고 헌신적입니다.
그리고 원격 저장소를 원해서 깃허브에 하나를 만들었습니다.여기서 저는 "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
(e.g. 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
이 문제는 일반적으로 원격 리포지토리에 처음 커밋할 때 발생합니다.오류에 "관련 없는 기록 병합 거부"가 분명히 표시되므로 --allow-unrelated-histories 플래그를 사용해야 합니다.
git pull origin master --allow-unrelated-histories
이제 우리가 수동으로 해결해야 할 몇 가지 충돌이 있을 것입니다.그런 다음 코드를 커밋하고 누르면 됩니다.
를 할때.git pull
는 이 .fatal: refusing to merge unrelated histories
한동안 로컬 복사본을 업데이트하지 않은 리포 모듈을 위해.
이 명령을 실행한 것은 로컬을 원본에서 새로 고치기 위해서입니다.저는 단지 원격에서 최신 정보를 원했을 뿐이고 로컬 변경은 필요하지 않았습니다.
git reset --hard origin/master
이것이 제 경우를 고쳤습니다.
나는 노력했다.git pull --allow-unrelated-histories
그리고 그것은 효과가 없었지만, 이것은 저에게 문제를 해결했습니다.
데스크톱 리포지토리의 모든 파일을 다른 폴더에 복사한 다음 폴더를 삭제했습니다.
그런 다음 새 프로젝트이기 때문에 저장소를 다시 복제합니다.
제가 파일을 다시 복사하고 푸시했을 때는 매력적으로 작동했습니다.
저도 이것 때문에 고생했지만, 어떻게든 해결책을 찾았습니다.
위의 오류가 발생하면 병합 커밋을 선택한 다음 기본 재배치를 계속하십시오.
git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue
에 새 로 GitHub로 .README
또는.gitignore
files 파일
다음과 같은 이유로 병합 또는 재배치할 수 없는 경우.git
폴더가 손상되었습니다.
그러면:
- 새 폴더 만들기
git clone
- 모든 파일을 이 폴더에 붙여넣기
이제 로컬과 원격은 "관련 기록"을 갖게 되고 병합되거나 기본 재배치됩니다.
이 오류는 다음과 같이 전환하여 해결됩니다.allow-unrelated-histories
pull 명령 태그를 합니다.Git pull 또는 Git merge 명령 뒤에 다음 태그를 추가합니다.
git pull origin master --allow-unrelated-histories
그 후에, 아마도 당신은 갈등을 겪을 것입니다.그러니 갈등을 해결하고, 그것을 저지르세요.그것은 나에게 효과가 있었다.
같은 문제가 발생했습니다.
제가 한 일은 이렇습니다.
git pull origin main --allow-unrelated-histories
Visual Studio Code를 사용하여 병합 충돌을 해결한 후 다음 작업을 수행했습니다.
git commit -m "commit message"
git push origin main
나의 경우에는 관련이 없는 기록 분기를 현재의 기록 분기와 병합하고 싶었습니다.
git merge <-unrelated-history-branch-name> --allow-unrelated-histories
blue112의 답변은 리베이스의 맥락에서 이 질문을 해결하지 못합니다.
분기된 두 분기를 동기화하는 유일한 방법은 두 분기를 다시 병합하여 추가 병합 커밋과 동일한 변경 사항(원래 분기와 재배치된 분기의 커밋)이 포함된 두 개의 커밋 세트를 생성하는 것입니다.말할 필요도 없이, 이것은 매우 혼란스러운 상황입니다.
그서래를 하기 에 기리달, 전에전.git rebase
항상 스스로에게 묻습니다. "그래요라고 대답한다면 키보드에서 을 할 수 있는 하세요. ( 예라대경서손에키예을수있떼않파방지은이법적괴는보드다우고할한경답변고요람사나이있른이고보를나뭇지가예▁"▁if▁to▁about방,:git revert
그렇지 않으면 역사를 얼마든지 다시 써도 무방합니다.
참조:재평가의 황금률
관리자가 서버 측에서 수백 개의 커밋을 사용하여 개발 지점을 생성/마스터하도록 강제 푸시한 후 이 오류가 발생했습니다.
저는 단지 끌어오기(fetch+merge)가 아니라 로컬 마스터를 원격 오리진 마스터에 맞추려고 했습니다.별도의 폴더로 이동하여 Git 클론을 만드는 것도 한 가지 방법이지만 하드 리셋을 하는 것이 더 우아한 해결책이라고 생각합니다.
그래서 이 오류에 대한 제 대답은, 이 특별한 경우에, 위의 것들 중 하나가 아닙니다.
난 그냥 이걸 원했어요:
git reset --hard origin/master
저는 몇 년 동안 리베이스를 사용하고 있는데 이런 문제는 처음입니다.첫development
원격저에서, 됨출호라고 .origin
그것은 문자 그대로 잘못된 것입니다. 왜냐하면 rebase는 git history를 재구성하는 위험한 명령이기 때문입니다.하지만 먼저 로컬 리포지토리를 사용해 보고 예상대로 작동하는 경우에만 푸시해야 합니다.
따라서 저의 일반적인 기본 재배치 워크플로우는 다음과 같습니다(단, 사용자만이 유일한 위원회가 아닌 분기에 기본 재배치를 사용하면 안 됩니다).이러한 분기의 경우 충돌을 병합하고 해결합니다(해당하는 경우).
- 작업 트리가 깨끗한지 확인합니다(커밋 해제 변경 사항 없음).
- 기준으로 삼을 재치할지예체로합니다웃, 크아같다니습들다어으점음배과를예▁checkout▁it▁you▁tos▁say(▁branch'for▁thes다').
master
줄 예를 들어 다음과 같습니다.git checkout master && git pull origin master && git checkout development
- 실제 기본 재배치를 수행합니다.
git rebase master
- 작업이 완료되고 모든 것이 예상대로 작동하면 리모컨으로 밀어 넣습니다.원격 호스트에는 이미 다른 순서로 기록이 있으므로 원격 호스트는 푸시할 내용 없이 응답합니다.따라서 "내 로컬 버전의 기록이 올바르고, 내 로컬 버전의 기록을 사용하여 해당 원격 분기의 모든 내용을 덮어씁니다."라고 말해야 합니다.
git push -f origin development
제가 이미 언급했듯이, 리베이스가 깃 이력을 조작한다는 것을 명심하세요, 그것은 보통 나쁜 것입니다.그러나 다른 사람이 약속하지 않는 지점에서 이 작업을 수행할 수 있습니다.다른 개발자가 분기를 풀 수 있도록 하려면 병합 자체, 스쿼시 또는 체리픽과 같은 다른 병합 전략을 사용합니다.다시 말해, 기본 재배치는 분산 개발의 도구가 되어서는 안 됩니다.이 리포지토리에서 작업하는 사용자만 해당됩니다.
기능 분기 전략을 사용합니다.이 경우, 저는 마스터 브랜치에서 그 사이에 발생한 다른 개발자들로부터 "업데이트"를 받기 위해 주로 rebase를 사용합니다.이렇게 하면 꺼내기 요청에 표시되는 커밋의 크기가 줄어듭니다.따라서 코드 검토자는 이 피쳐 분기에서 변경된 내용을 더 쉽게 볼 수 있습니다.
저장소의 얕은 Git 복제본이 있는 경우에도 이 문제가 발생합니다.
최근에 CI/CD 설정에서 이 문제가 발생했는데 이전 솔루션 중 어떤 것도 제대로 작동하지 않았습니다.저는 MR 소스 브랜치에 대한 MR 생성 코드를 분석하기 위해 CI/CD 파이프라인을 구축하고 있었습니다.그러기 위해서는 main branch에 대한 분석을 한 번 실행한 후 main과 병합된 MR source branch에 대한 분석을 실행해야 했고, branch를 통해 main을 병합하려고 시도하는 중에 이 오류가 발생했습니다.git merge
지휘권
CI/CD 설정에서 이러한 현상이 발생하는 이유는 다음과 같습니다.일반적으로 CI/CD 환경에서 Git 저장소는 작업 속도를 높이기 위한 얕은 클론입니다. Git 저장소에는 커밋의 전체 기록이 포함되어 있지 않습니다. Git를 병합할 때 관련이 없는 분기를 병합하려고 시도하는 것으로 간주할 수도 있지만 실제로는 그렇지 않습니다.
솔루션:
다음 명령을 사용하여 얕은 리포지토리를 얕은 리포지토리로 변환합니다.
git fetch --unshallow
매우 드문 시나리오입니다. 리모컨을 제거했습니다(예:origin
):
git remote rm origin
그리고 잠시 후, 무슨 이유에서인지 다시 추가하려고 했지만 URL을 잘못 입력했습니다.
git remote add origin git@github.com:example/wrong.git
물론 해결책은 올바른 URL을 사용하는 것입니다.
git remote add origin git@github.com:example/correct.git
나도 같은 오류가 있었고, 이 명령은 나에게 효과가 있었습니다.
git pull gitlab master --allow-unrelated-histories
gitlab은 당신의 경우 기원 또는 herku일 수 있습니다.
fatal: refusing to merge unrelated histories
얕은 클론에 의해 발생할 수도 있습니다. 이식 커밋이 공통 기반을 볼 수 있을 만큼 충분히 내려가지 않기 때문입니다.
밀거나 당기고 밀거나 병합하고 밀 수 없기 때문에 다음 작업을 수행할 수 없습니다.
- GitHub 저장소에 새 분기를 생성할 수 있습니다.
- 그리고 나서:
git add .
git commit -m 'commitName'
- 터미널의 현재 디렉터리에 있는 분기를 참조하십시오.
git branch -m master branchName
git push -f origin branchName
- 코드가 새 분기로 푸시됩니다.
- 그런 다음 이 두 개의 분기를 병합할 수 있습니다.
이것은 저에게 효과가 있었습니다.
언급URL : https://stackoverflow.com/questions/37937984/git-refusing-to-merge-unrelated-histories-on-rebase
'itsource' 카테고리의 다른 글
목록의 모든 요소가 동일한 유형인지 확인 (0) | 2023.05.07 |
---|---|
"git commit" 대신 수행된 "git commit --amend"를 실행 취소하는 방법 (0) | 2023.05.07 |
Git 하위 모듈 업데이트 (0) | 2023.05.02 |
git를 사용하여 특정 파일의 변경 사항 보기 (0) | 2023.05.02 |
로보몽고를 사용하여 MongoDB Atlas에 연결하려면 어떻게 해야 합니까? (0) | 2023.05.02 |