47

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

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

リモートサーバーから送信されているすべてのファイルをローカルで強制的に上書きするようにgitに指示する方法はありますか?プルしてからプルするよりも速い方法はありgit reset --hard HEAD~1ますか?

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

4

2 に答える 2

85

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

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

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

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

于 2013-01-10T03:31:12.733 に答える
6
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
于 2017-10-04T06:20:39.950 に答える