web-dev-qa-db-ja.com

マージの競合を解決する:すべてのファイルを強制的に上書きする

私はgitリポジトリに取り組んでいます自分で(だから、そうすることの意味と警告を知っています)そして、どういうわけか、あるべきではないツリーがプッシュされた後、コミットを受けました。

今私は引き戻そうとしていますが、それは何百ものマージ競合について不平を言っています。

Gitにforcefullyを伝える方法はありますか?リモートサーバーからのすべてのファイルをローカルで上書きしますか? git reset --hard HEAD~1を実行してからプルするよりも速い方法はありますか?

同じメモで、単純なマージで同じことを行う方法はありますか?私が見たすべてのことは、マージ競合解決段階ですべてのファイルをチェックアウトすることを示唆していますが、何百ものファイルがある場合、手動でチェックアウトすることはできません。

38
Qix

リモートリポジトリにある最後のバージョンをコピーして、ローカルで行ったすべての変更を破棄する3つの簡単なソリューションがあります。

  1. リポジトリを破棄して、再度クローンを作成します。これは最も簡単なソリューションですが、リポジトリが大きい場合は時間がかかり、re configureingなどの追加の作業が必要になる場合があります。

  2. git reset --hard <hash>を使用してローカルの変更を破棄し、git pullを実行します。問題は、回避しようとしている変更履歴に先行するコミットを最初に見つける必要があることです。そのコミットハッシュにリセットした後、git pullを実行します。

  3. git fetchを実行して、リモートブランチ(通常はOrigin/master)のローカル参照に更新を反映し、この参照を渡すgit reset --hardを実行します。つまり、git reset --hard Origin/masterです。

65
git reset --hard {remote_repository_name}/{branch_name}

例:

git reset --hard upstream/branch1

ブランチで作業している場合は、上記のコードを使用できますが、その前に、ローカルリポジトリに設定(上流またはオリジン)する必要があります。

git remote add upstream https://github.com/lakini/example.git

ここで、 https://github.com/lakini/example.git はリモートのアップストリームリポジトリです。

このように、リモートリポジトリ(Origin)でも作業できます。

git reset --hard Origin/branch1
4
Sithara