2016-09-29 6 views
11

git pushに関する問題が発生しました。 以前は正常に動作しましたが、今回は失敗しました。 (誰かと私に言った)私は私のromote起源を関連付けるためにgit remote add originを使用しますが、それは、そのfatal: remote origin already exists. "関連のない履歴をマージするのを拒否しました"リカバリしたリポジトリに引き込み中にエラーが発生しました

  • に警告し、私はgit remote rm originを使用 初めに、私は私の主人MINGW64 /d/javasoft/apache-tomcat-7.0.70/webapps/MyNote (master) に思い、そして、

    • 、 大丈夫です。
    • 次に、git remote add origin https://github.com/***/***.gitを再度使用します。大丈夫です。
    • 私はgit push -u origin masterを使用しました(私はgit push origin masterを試しましたが、何らかの理由で私のローカル全体の.gitを失ってしまったので、初めてプッシュするかもしれないと思いますので、-uを追加してください)。しかし、それは警告error: failed to push some refs to 'https://github.com/***/***.git'
    • 私はpushを使用する前に私はgit pull origin masterを使用すべきだと私に言った、と私はそれをしました。しかし、それは警告:fatal: refusing to merge unrelated histories
    • Git refusing to merge unrelated historiesで回答が見つかりましたが、うまくいかなかったようです。私の問題では、それは実際に行うには方法がわからないfatal: Couldn't find remote ref –allow-unrelated-histories

    を警告...ちょうどローカルリポジトリへの変更をコミットするようにしてください。..

  • +0

    歴史が変わった理由を確立しましたか?ローカルとリモート/起源が互いに先にコミットしているかどうかを調べる必要があります。もしそうなら、マージするかリベースするかを決めます。 – javabrett

    +0

    "前に何らかの理由でローカルの.gitを失った"。だからあなたはあなたのコードだけで新しい歴史を始めましたか?それはあなたが見るものを説明することができます。 – max630

    +0

    基本的には、あなたのケースでは '--allow-unrelated-history'フラグを使うべきではありません**。代わりにコードの履歴を復元して、コード内にある元の履歴からの最後のコミットが親であるようにしてから、マージで正しい結果を返すようにしてください。 – max630

    答えて

    49

    これはまもなく回答できません。

    警告:あなたは関係のない歴史が何であるかを知っている、あなたがそれを必要と確信していない限り、あなたは–allow-unrelated-historiesフラグを使用しないでください。このチェックは、無関係のプロジェクトを誤ってマージする災害を防ぐために導入されました。

    は、私の知る限りを理解して、あなたのケースでは、以下の起こっている:

    をあなたはいくつかの点1でプロジェクトをクローン化し、そして2を指すように、いくつかの開発を行っています。一方、プロジェクトはいくつかのポイント3に進化しました。

    enter image description here

    次に、あなたはいくつかの理由については、お近くの.gitサブディレクトリ失った - 1から2にすべてのあなたの歴史を含んでいました。あなたは現在の状態を復元することができました。

    enter image description here

    しかし、今ではどんな歴史を持っていません - プロジェクト全体がどこからともなく現れているように見えます。 gitにそれらをマージするよう依頼すれば、あなたの変更がどこにあるかを言うことができないので、遠隔プロジェクトに追加することができます。あなたは今を行う必要がありますどのような

    は、あなたがあなたがあなたの代わりに最後を探す必要がありました場合はコミットプロジェクト(私はあなたがそれの後に引っ張っていなかったと仮定し、クローン化されているリモート履歴から1をコミットすることバック見つけることですあなたは引っ張った)。その後、コミット1から開始されるように履歴を変更する必要があります。そうすれば、gitは(例えばpullなどで)正しくマージできるようになります。だから、

    、ステップ(あなたが復元に今あると仮定すると、履歴なしでコミット):あなたは

  • 例えば時間をコミットに基づいて、いくつかの1?としてからクローン化している1コミットされ

    • 見積もりgit diff _1?_..HEADを実行し、注意深く読んでください。差異には編集内容のみが含まれていることを確認してください。それ以上のものが含まれている場合は、少し間違ったものを選択してください。
    • コミット1を見つけたら、それを親にしてgit --reset --soft _1_、次にgit commitとしてください。

      enter image description here

  • は今、それはあなたがして、1からクローニング1は、すべての変更をコミットしてきたように見えます。とにかく古い.gitディレクトリで中間の履歴が失われましたが、今度はgit pullを実行できます。正しくマージされます。

    +2

    私はGithubの新しく作成されたリポジトリに既存のリポジトリをインポートするときにフラグを使用する必要があることを発見しました。 – Rabiees

    -3

    をプッシュします。 GITHUBにそれらをプッシュする前に。それは問題を解決するかもしれない(私は同様の問題を抱えていた)。

    +1

    SOは私に-1を説明したいので、 "これは完全に間違っています"。 – dfarrell07

    関連する問題