git rebase origin/development
동안 Git에서 다음 오류 메시지가 표시됩니다.
fatal: refusing to merge unrelated histories Error redoing merge 1234deadbeef1234deadbeef
내 Git 버전은 2.9.0입니다. 이전 버전에서는 잘 작동했습니다.
새 릴리스에 도입된 강제 플래그로 관련 없는 기록을 허용하는 이 리베이스를 어떻게 계속할 수 있습니까?
질문자 :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
를 사용하여 강제로 병합을 수행할 수 있습니다.
제 경우에는 오류가 치명적이었습니다. 모든 시도, 특히 원격으로 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 옵션을 전달하도록 학습되었습니다.
다음 명령을 시도하십시오.
git pull origin master --allow-unrelated-histories
이렇게 하면 문제가 해결됩니다.
로컬 저장소를 먼저 설정할 때 이 오류가 발생했습니다. 그런 다음 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
이를 위해 다음 명령을 입력합니다.
git pull origin branchname --allow-unrelated-histories
예를 들어,
git pull origin master --allow-unrelated-histories
참조:
git pull origin <branch> --allow-unrelated-histories
Vim 편집 창으로 연결됩니다.
git push --set-upstream origin <branch>
이 명령을 실행하고 문제가 해결되었습니다.
git pull origin branchName --allow-unrelated-histories
자세한 내용은 이 페이지 를 확인하세요.
나는 같은 문제가 있었다. 이 시도:
git pull origin master --allow-unrelated-histories git push origin master
git pull origin master
수행할 때 이 오류가 발생합니까?:
fatal: refusing to merge unrelated histories
git pull origin master --allow-unrelated-histories git pull origin main --allow-unrelated-histories
"치명적: 관련 없는 이력 병합 거부" Git 오류는 관련이 없는 두 프로젝트를 병합할 때 발생합니다(즉, 서로의 존재를 알지 못하고 커밋 이력이 일치하지 않는 프로젝트).
명령 GIT HUB DOCS --allow-unrelated-historys :
--allow-unrelated-히스토리
기본적으로 git merge 명령은 공통 조상을 공유하지 않는 기록 병합을 거부합니다. 이 옵션은 독립적으로 수명을 시작한 두 프로젝트의 기록을 병합할 때 이 안전을 무시하는 데 사용할 수 있습니다. 매우 드문 경우이므로 기본적으로 이를 활성화하는 구성 변수가 존재하지 않으며 추가되지 않습니다.
Android 스튜디오 및 IntelliJ의 경우:
먼저 모든 것을 커밋 하고 충돌을 해결하십시오.
그런 다음 IDE 아래에서 터미널을 열고 다음을 입력합니다.
git pull origin master --allow-unrelated-histories
이제 밀 수 있습니다.
git pull --rebase development
시도
경고 이것은 잠재적으로 원격 저장소를 덮어쓸 것입니다
이것은 나를 위해 일했습니다.
git push origin master --force
다른 모든 답변은 실제로 질문에 대답하지 않으므로 관련 질문에 대한 이 답변에서 영감을 얻은 솔루션이 있습니다.
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.
나는 같은 문제가 있었다. 문제는 원격에 이것을 방해하는 것이 있다는 것입니다.
먼저 로컬 저장소를 만들었습니다. LICENSE
및 README.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
먼저 다음 명령을 사용하여 원격 변경 사항을 로컬로 가져옵니다.
git pull origin branchname --allow-unrelated-histories
** 분기 이름은 제 경우 마스터입니다.
pull 명령이 완료되면 충돌이 발생합니다. 갈등을 해결해야 합니다. Android Studio를 사용하여 충돌을 해결합니다.
충돌이 해결되면 병합이 완료됩니다!
이제 안전하게 밀 수 있습니다.
이것은 일반적으로 원격 저장소에 처음 커밋할 때 발생합니다. 오류가 "관련 없는 기록 병합을 거부함"으로 명확하게 표시되므로 --allow-unrelated-history 플래그를 사용해야 합니다.
git pull origin master --allow-unrelated-histories
이제 수동으로 해결해야 하는 몇 가지 충돌이 있습니다. 그런 다음 코드를 커밋하고 푸시하십시오.
git pull --allow-unrelated-histories
가 작동하지 않았지만이 문제를 해결하는 방법은 다음과 같습니다.
데스크탑 리포지토리의 모든 파일을 다른 폴더에 복사한 다음 폴더를 삭제했습니다.
그런 다음 새 프로젝트이기 때문에 repo를 다시 복제합니다.
파일을 다시 복사하고 푸시하면 매력처럼 작동했습니다.
git pull
수행할 때 치명적이라는 메시지가 나타납니다. 잠시 동안 로컬 복사본을 업데이트하지 않은 repo 모듈에 대해 fatal: refusing to merge unrelated histories
원본에서 로컬을 새로 고치기 위해 이 명령을 실행했습니다. 나는 원격에서 최신을 원했고 로컬 변경이 필요하지 않았습니다.
git reset --hard origin/master
이것은 제 경우에 그것을 고쳤습니다.
저도 이것 때문에 고생했지만 해결 방법을 찾았습니다.
위의 오류가 발생하면 병합 커밋을 선택하고 리베이스를 계속하십시오.
git cherry-pick -m 1 1234deadbeef1234deadbeef git rebase --continue
Google 직원의 경우:
GitHub에서 새 리포지토리를 만들고 실수로 README
또는 .gitignore
파일로 초기화한 경우.
.git
폴더가 손상되어 병합하거나 리베이스할 수 없는 경우.
그 다음에:
git clone
이제 로컬 및 원격에는 "관련 기록"이 있고 행복하게 병합되거나 리베이스됩니다.
allow-unrelated-histories
스위치를 토글하여 해결됩니다. git pull 또는 git merge 명령 뒤에 다음 태그를 추가합니다.
git pull origin master --allow-unrelated-histories
그 후에 갈등이 생길 수 있습니다. 그래서 갈등을 해결하고 커밋하십시오. 그것은 나를 위해 일입니다.
제 경우에는 관련 없는 히스토리 분기를 현재에 병합하고 싶었습니다.
git merge <-unrelated-history-branch-name> --allow-unrelated-histories
가장 많이 투표 된 답변은 리베이스의 맥락에서이 질문을 해결하지 못합니다.
두 분기된 분기를 동기화하는 유일한 방법은 다시 병합하여 추가 병합 커밋과 동일한 변경 사항을 포함하는 두 세트의 커밋(원래 분기와 리베이스된 분기의 것)을 만드는 것입니다. 말할 필요도 없이 이것은 매우 혼란스러운 상황입니다.
git rebase
를 실행하기 전에 항상 "이 브랜치를 보고 있는 다른 사람이 있습니까?"라고 자문해 보십시오. 대답이 '예'인 경우 키보드에서 손을 git revert
명령)에 대해 생각하기 시작합니다. 그렇지 않으면 원하는 만큼 기록을 다시 쓰는 것이 안전합니다.
참조: https://www.atlassian.com/git/tutorials/merging-vs-rebasing#the-golden-rule-of-rebasing
나는 몇 년 동안 rebase를 사용하고 있으며 그런 문제가 발생한 적이 없습니다. 그러나 첫 번째 문제는 origin
이라는 원격 저장소 development
에서 직접 수행하려고 한다는 것입니다. rebase는 git 기록을 재구성하는 위험한 명령이기 때문에 말 그대로 잘못된 것입니다. 즉, 먼저 로컬 저장소에서 시도하고 예상대로 작동하는 경우에만 푸시해야 합니다.
따라서 내 일반적인 rebase 워크플로는 다음과 같습니다(그러나 유일한 위원회가 아닌 분기에는 rebase를 사용해서는 안 됩니다. 이러한 분기의 경우 해당되는 경우 충돌을 병합하고 해결하기만 하면 됩니다).
master
라고 가정해 보겠습니다. 한 줄 명령으로): git checkout master && git pull origin master && git checkout development
git rebase master
git push -f origin development
이미 언급했듯이 rebase는 git 기록을 조작한다는 것을 명심하십시오. 이는 일반적으로 나쁜 일입니다. 그러나 아무도 커밋하지 않는 지점에서 그렇게 할 수 있습니다. 다른 개발자가 분기를 풀 수 있도록 유지하려면 병합 자체, 스쿼시 또는 체리픽과 같은 다른 병합 전략을 사용하십시오. 즉, Rebase는 분산 개발 도구가 되어서는 안 됩니다. 이 저장소에서 작업하는 유일한 사람이라면 잘 작동합니다.
우리는 기능 분기 전략을 사용합니다. 여기서 나는 다른 개발자들로부터 "업데이트"를 받기 위해 보통 rebase를 사용하는데, 그 동안 마스터 브랜치에서 발생했습니다. 이렇게 하면 pull 요청에서 볼 수 있는 커밋의 크기가 줄어듭니다. 따라서 코드 검토자가 이 기능 분기에서 변경한 내용을 더 쉽게 볼 수 있습니다.
당신은 밀거나 당기고 밀거나 병합하고 당기고 밀 수 없기 때문에 : -
git add .
git commit -m 'commitName'
git branch -m master branchName
git push -f origin branchName
이것은 나를 위해 일했습니다.
출처 : http:www.stackoverflow.com/questions/37937984/git-refusing-to-merge-unrelated-histories-on-rebase
PHP의 배열에서 요소 삭제 (0) | 2021.11.10 |
---|---|
"B"를 인쇄하는 것이 "#"을 인쇄하는 것보다 훨씬 느린 이유는 무엇입니까? (0) | 2021.11.10 |
MySQL에서 datetime 또는 timestamp 데이터 유형을 사용해야 합니까? (0) | 2021.11.09 |
문자열에 특정 단어가 포함되어 있는지 어떻게 확인합니까? (0) | 2021.11.09 |
Node.js 프로그램에 명령줄 인수를 어떻게 전달합니까? (0) | 2021.11.09 |