16

でリポジトリをダウンロードしました

git clone <address>

私はいくつかの変更を行い、いくつかのファイルを編集しました。今はすべてを破棄し、ディスク上にあるものがコードベースの元のリモート バージョンに他ならないことを確認したいと思います: 正しいコマンドは何ですか?

4

3 に答える 3

26

何が起こっているのかを理解できるように、ここに長い説明があります。

リモートが呼び出されたと仮定しますorigin

git reset --hard HEAD
git checkout origin/master
git branch -D master
git checkout -b master

これが行うことは次のとおりです。

  1. (git status で変更されたファイルがないと表示された場合はオプション)ディスク上の変更されたファイルをすべて破棄します (これが理由ですreset --hard)

  2. リモート マスター ブランチをチェックアウトします (注: 「切り離されたヘッド」状態になります)

  3. masterローカルブランチを削除します (ローカルの変更をすべて破棄します)。

  4. master現在のヘッドを新しいブランチとして呼び出す

ここで、おそらく少し違うことをしたいと思うでしょう...つまり、変更を破棄せずに、別の名前付きブランチに配置するだけです...結局、いつそれらが再び必要になるかはわかりません

git checkout -b my-silly-changes
git branch -D master
git checkout -b master origin/master

これにより、現在の変更が呼び出された新しいローカル ブランチに保存され、呼び出されmy-silly-changesた古いローカル ブランチが削除されmaster、最後にリモート ヘッドから再作成されます。

そして、自分が何をしているのかを知っていると思う人々のための説明は次のとおりです。

単一のコマンド:

git reset --hard origin/master

ローカルの変更をすべて破棄し、現在のブランチを の最新のフェッチ済み状態に再ポイントしますorigin/master。これは、この回答の冒頭にある 4 つのコマンドとまったく同じ効果がありますが、カーテンの後ろを見ることはありません。

于 2012-10-01T07:56:19.423 に答える
1

すべてのファイルを破棄し、すべての変更を失いたい(!) 場合は、次の操作を実行できます。

git reset --hard origin/master

これにより、「マスター」ブランチのローカル コピーと作業コピーの状態が、アップストリーム (元のリモート) から取得した最後のバージョンにリセットされます。

注: これは、

  • アップストリーム リポジトリは「origin」と呼ばれます (のデフォルトgit clone)
  • あなたはリモートmasterブランチのクローンで作業しています

"master" 以外のブランチで作業している場合は、コマンドを調整します。

git reset --hard origin/branch1
于 2012-10-01T07:52:24.240 に答える
0

何もコミットしていない場合は、git reset --hardそれで十分です。

さまざまなモード ( --hard、--mixed、--soft) で git reset がどのように機能するかを説明する優れたリソースを次に示します。

免責事項

git reset --hard安全でない操作です。コミットされていない変更は作業ツリーから削除され、元に戻すことはできません。

于 2012-10-01T07:52:12.830 に答える