私のGithubリポジトリからファイルをプルしようとしています:「無関係な履歴のマージを拒否しています」


151

私はgitを学んでおり、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

ところで、ローカルで私はマスターブランチにいます(他のブランチはありません):

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

4
ローカルリポジトリをセットアップするときに、Githubリポジトリを複製しましたgit initか、それとも作成しましたか?後者の場合、それらのリポジトリは無関係であり(一般的なコミットはありません)、それらをマージすることはできません(プルはフェッチ+マージです)。
ポール・

git initを実行しました。これを修正するには、Githubリポジトリを複製する必要がありますか?
MichaelSB 2016

1
Githubリポジトリを複製して作業を続けることができますが、それでも個別のリポジトリになります。関係のない2つの履歴をマージしますか?
ポール・

履歴をマージしたいと思いますが、実際にはローカルとgithubの両方でファイルを結合したいだけです。つまり、Githubにある古いファイルの履歴はあまり気にしません。
MichaelSB 2016

回答:


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

私はすべての人の仕事の問題のブロックを解除することを目的としていますが、「プッシュ--force」または「--allow_unrelated_histories」は一般的なソリューションとして新しいユーザーに教えるべきではないと思います。そもそもなぜうまくいかないのかわからない。

ローカルリポジトリから始めて、GitHubでリモートを作成して作業を共有したい場合は、注意が必要なことがあります。

新しいオンラインリポジトリを作成するときに、「このリポジトリをREADMEで初期化する」オプションがあります。細則を読むと、「既存のリポジトリをインポートする場合は、この手順をスキップしてください」と表示されます。

そのボックスをチェックした可能性があります。または、同様に、最初のプッシュを試みる前にオンラインで追加/コミットを行いました。何が起こるかというと、それぞれの場所で一意のコミット履歴を作成し、Nevermoreの回答で述べられている特別な許可がないとそれらを調整できません(gitがそのように操作することを望まないため)。ここで述べたアドバイスのいくつかに従うこともできますが、ローカルファイルを新しいリモートにリンクする場合は、そのオプションをオンにしないでください。その最初のプッシュのためにリモートをクリーンに保ちます。

参照:git + hubの私の最初の経験は、この同じ問題に遭遇し、何が起こったのか、そしてその理由を理解するために多くの学習をすることでした。


12

一方の端に実質的な履歴がない場合(別名github端の単一のreadmeコミットの場合)、readmeをローカルリポジトリに手動でコピーしgit push -f、バージョンを新しいルートコミットにするためにa を実行する方が簡単であることがよくあります。

私はそれが少し複雑ではなく、あいまいなフラグを覚えておく必要がなく、履歴を少しきれいに保ちます。


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.