web-dev-qa-db-ja.com

Githubリポジトリからファイルを取り出そうとしています:「関連性のない履歴をマージすることを拒否しています」

私は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
129
MichaelSB

--allow-unrelated-historiesを試す

Max630がコメントした、またはここで説明されているように Gitは関連のない履歴をマージすることを拒否しました

267
Nevermore
git checkout master
git merge Origin/master --allow-unrelated-histories

それから葛藤を解決

git add -A .
git commit -m "Upload"
git Push
83
Do Nhu Vy

仕事の問題のブロックを解除するためのものではありますが、一般的な解決策として「Push --force」や「--allow_unrelated_histories」を使用するとリポジトリに大きな影響を与える可能性があるため、新しいユーザーに教えるべきではありません。なぜ物事がそもそもうまくいかなかったのか理解せずに。

このような状況でローカルリポジトリから作業を始めていて、作業内容を共有するためにGitHub上にリモートを作りたい場合は、注意が必要です。

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

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

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

32
BigJMoney

片端に十分な履歴がない場合(github側でのreadmeコミットが1つだけの場合も)、readmeを自分のローカルレポジトリに手動でコピーし、自分のバージョンを新しいルートにするためにgit Push -fを実行する方が簡単です。コミット。

私はそれが少し複雑ではないことを見つけ、あいまいなフラグを覚えておく必要はなく、そして歴史を少しきれいにしておきます。

10
captncraig

あなたのブランチで - マスターと言って、関係のない歴史を引っ張って許可してください

git pull Origin master --allow-unrelated-histories

私のために働きました。

5
Edgar256

--allow-unrelated-historiesを使用したとき、このコマンドはあまりにも多くの競合を生成しました。私も作業していないファイルに競合がありました。エラー" Refusing to merge unrelated histories"を克服するために、私は次のrebaseコマンドを使用しました:

git pull --rebase=preserve --allow-unrelated-histories

このコミットの後、コミットメッセージを使ってコミットされていない変更をコミットします。最後に、次のコマンドを実行してください。

git rebase --continue

この後、私の作業コピーはリモートコピーで最新のものになり、以前と同じように変更をプッシュすることができました。引っ張っている間、これ以上関係のない履歴エラーはありません。

1
Tasnim Fabiha

次のコマンドを実行してください。

git pull Origin master --allow-unrelated-histories

マージvimが開きます。マージメッセージを追加して、

  1. ESCを押す
  2. Shift + ';'を押す
  3. 「w」を押してから「q」を押す。

そして、あなたは行ってもいいです。

0
KayV