git init 이후의 unrelated histories로 막힌 경우의 원인과 대처법

3527 단어 GitHubGit

결론


git init 한 직후에 push 할 수 없는 경우는 --allow-unrelated-histories 옵션을 붙여 merge 하고 나서 push 한다.

어떤 경위였습니까?



1. 로컬 리포지토리를 새로 만든



로컬 리포지토리를 새로 만들고 첫 번째 커밋을 수행합니다.
$ git init
$ git add .
$ git commit -m 'initial commit'

2. GitHub에서 원격 리포지토리를 만들었습니다.



로컬 리포지토리와 같은 이름의 리모트 리포지터리를, GitHub 상에서 새롭게 만듭니다. 이 때 .gitignore를 추가합니다.



3. 오류가 발생하여 푸시할 수 없음



로컬 리포지토리에 원격 리포지토리를 등록합니다.
$ git remote add origin https://github.com/hajime-f/sample.git

이 후 push 하면 다음과 같은 에러가 돌아왔습니다.
$ git push origin master
To https://github.com/hajime-f/sample.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/hajime-f/sample.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

에러 메세지로 말한 대로 pull 했을 경우, 이번에는 다음과 같은 에러가 돌아와서 pull 할 수 없었습니다.
$ git pull origin master
From https://github.com/hajime-f/sample
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

4. --allow-unrelated-histories 옵션으로 merge 하면 push 할 수 있었다


--allow-unrelated-histories 옵션을 붙여 merge 합니다.
$ git merge --allow-unrelated-histories origin/master
Merge made by the 'recursive' strategy.
 .gitignore | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 129 insertions(+)
 create mode 100644 .gitignore

그러면 제대로 푸시할 수 있었습니다.
$ git push origin master
...
remote: Resolving deltas: 100% (2170/2170), done.
To https://github.com/hajime-f/sample.git
   f86aa3c..1a66967  master -> master

무엇이 원인 이었습니까?



공통의 오리지널(이력)로부터 분기한 브랜치가 존재해, 이것들이 pull 에 의해 merge 되는 것이 통상입니다.

그러나, 이번과 같이 git init 한 직후에서는, 로컬과 리모트로 공통의 오리지날이 존재하지 않기 때문에, 디폴트에서는 merge 가 기능하지 않습니다. 따라서 pull 하면 "unrelated histories"라고 에러가 나옵니다.

거기서, --allow-unrelated-histories 옵션으로 「굉장히 코타아 괜찮아!」라고 질타하면 merge 할 수 있습니다.

좋은 웹페이지 즐겨찾기