変更を元に戻す
- [アーティクル]
-
-
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
Git リポジトリ内の変更を元に戻す場合は、まず元に戻す変更の種類を決定します。 たとえば、次の操作を行います。
- ファイルを前回コミットしたバージョンに戻して、ファイルに対する確定されていない変更を破棄します。 ファイルを任意のコミットされたバージョンに戻すこともできます。
- ブランチを以前のコミットにリセットして、以前の状態に戻します。
- 変更を元に戻す新しいコミットを作成して、共有コミットによって行われた変更を元に戻します。 この方法では既存のコミット履歴が再書き込みされないので、プッシュされ、他のユーザーが使用しているコミットによって行われた変更を元に戻す場合に適しています。
- 前回のコミットを修正して、内容またはメッセージを変更します。 詳細については、「前回のコミットを更新する方法」を参照してください。
- 修正を含む新しいコミットを作成して、以前のコミットで発生した問題を修正します。 詳細については、「コミットを作成する方法」を参照してください。
この記事では、次の方法について説明します。
- ファイルに対する確定されていない変更を破棄する
- ブランチを以前の状態に戻す
- 共有コミットによって行われた変更を元に戻す
ファイルに対する確定されていない変更を破棄する
ファイルに変更を加えたが、それらの変更をコミットしていない場合は、Git チェックアウト を使用して変更をすばやく破棄し、ファイルを前回コミットされたバージョンに戻すことができます。
Git checkout
でコミット ID を指定すると、ファイルを任意のコミットされたバージョンに戻すこともできます。
警告
Git checkout
によって破棄される変更を再適用する可能性がある場合は、代わりにそれらの変更をスタッシュすることを検討してください。
Visual Studio 2022 は、[Git] メニュー、[Git 変更]、および [ソリューション エクスプローラー] のコンテキスト メニューを使用して、Git バージョン管理エクスペリエンスを提供します。 Visual Studio 2019 バージョン 16.8 には、チーム エクスプローラーの Git ユーザー インターフェイスも用意されています。 詳細については、「Visual Studio 2019 - チーム エクスプローラー」タブを参照してください。
Visual Studio では、ファイルを前回コミットされたバージョンに戻すことで、ファイルに対する確定されていない変更の破棄がサポートされています。
[Git 変更] ウィンドウで、破棄する変更を含むファイルを特定します。 [ステージされている変更] セクションにファイルがある場合は、それを右クリックして [アンステージ] を選びます。 [変更] セクションに、アンステージされたファイルが表示されます。
ファイルが [変更] セクションにある場合は、それを右クリックし、[変更を元に戻す] を選んで、前回のコミット以降のファイルに対するすべての変更を破棄します。
Visual Studio では、ファイルを前回コミットされたバージョンに戻すことで、ファイルに対する確定されていない変更の破棄がサポートされています。
チーム エクスプローラーの [変更] ビューで、破棄する変更を含むファイルを特定します。 [ステージされている変更] セクションにファイルがある場合は、それを右クリックして [アンステージ] を選びます。 [変更] セクションに、アンステージされたファイルが表示されます
ファイルが [変更] セクションにある場合は、それを右クリックし、[変更を元に戻す] を選んで、前回のコミット以降のファイルに対するすべての変更を破棄します。
Git checkout
コマンドを使用して、ファイルを前回コミットされたバージョンに戻すことで、ファイルに対する確定されていない変更を破棄できます。
git checkout <file>
たとえば、git checkout README.md
を実行すると、README.md
ファイルに対する確定されていない変更が破棄されます。
Git checkout
では、コミットを一意に識別する部分的または完全なコミット ID を指定した場合、ファイルを以前にコミットしたバージョンに戻すこともできます。
git checkout <commit ID> <file>
コミット ID の検索の詳細については、「コミット ID を検索する」を参照してください。
注意
Git checkout
コマンドを使用してファイルを元に戻す方法は、ブランチを切り替える一般的な使用方法とは異なります。 checkout
コマンド出力で、ブランチ間で切り替えているか、ファイルを更新しているかがわかり、ユーザーがどちらを実行しようとしているかが不明な場合は警告が出ます。
ブランチを以前の状態に戻す
Git reset を使用してブランチを以前のコミットにリセットすることで、ブランチを以前の状態に戻すことができます。 Git reset
は、すべてのブランチ フォルダー内のすべてのファイルに影響します。
Git reset
にはいくつかのオプションがあります。 既定のオプションでは、ブランチを以前のコミットに戻しますが、後続のすべての変更は確定されていない変更として保持されます。 もう 1 つのオプションでは、そのコミット以降のすべてのブランチ ファイルに対するすべての変更を破棄して、ブランチを以前のコミットに戻します。
警告
前回のコミットがプッシュされ、他のユーザーと共有されている場合は、前回のコミットより前のコミットにブランチをリセットしないでください。 そうすると、ローカル ブランチの履歴がリモート ブランチの履歴と一致しなくなります。 共有ブランチについては、「共有コミットによって行われた変更を元に戻す」を参照してください。
メニュー バーから [Git] > [View Branch History] (ブランチ履歴の表示) を選んで、現在のブランチの [履歴] タブを開きます。
現在のブランチの [履歴] タブで、リセットするコミットを右クリックしてから、[リセット] > [変更を削除 (--hard)] を選んで、選択したコミットにブランチをリセットし、そのコミット以降のすべてのブランチ ファイルに対するすべての変更を削除します。 または、[リセット] > [変更を保持 (--mixed)] を選んで、選択したコミットにブランチをリセットし、後続のすべての変更をステージされていない変更として保持します。
チーム エクスプローラーの [変更] ビューで、[アクション] > [履歴を見る] を選んで、現在のブランチの [履歴] タブを開きます。
現在のブランチの [履歴] タブで、リセットするコミットを右クリックしてから、[リセット] > [変更を削除 (--hard)] を選んで、選択したコミットにブランチをリセットし、そのコミット以降のすべてのブランチ ファイルに対するすべての変更を削除します。 または、[リセット] > [変更を保持 (--mixed)] を選んで、選択したコミットにブランチをリセットし、後続のすべての変更をステージされていない変更として保持します。
Git reset
を使用して、ブランチを以前のコミットの状態に戻すことができます。 Git reset
コマンドは、さまざまなフラグを設定して使用できます。
--hard
フラグは、指定したコミットにブランチをリセットし、後続のすべての変更を破棄するように Git に指示します。 このオプションを使用すると、作業が失われる可能性があるため、注意してください。
--mixed
フラグは、指定したコミットにブランチをリセットするが、後続のすべての変更をステージされていない変更として保持するように Git に指示します。 これは既定のオプションです。
--soft
フラグは、指定したコミットにブランチをリセットするが、後続のすべての変更を以前の状態に従って、ステージされた変更とステージされていない変更として保持するように Git に指示します。
Git reset
は一般的に、前回のコミット以降のすべてのファイルで確定されていない変更をすべて破棄する --hard
オプションを指定して使用します。
git reset --hard
ブランチを前回のコミットとは異なるコミットにハード リセットするには、コミットを一意に識別するコミット ID または部分的なコミット ID を指定します。
git reset --hard <commit ID>
コミット ID の検索の詳細については、「コミット ID を検索する」を参照してください。
共有コミットによって行われた変更を元に戻す
コミットによって行われた変更を元に戻すには、Git revert を使用して、それらの変更を元に戻す新しいコミットを作成します。 Git revert
では、元のコミットは削除されません。 この方法は、Git revert
によって以前のコミット履歴が変更されないので、共有コミットによって行われた変更を元に戻す場合に適しています。そのため、ローカルとリモートのブランチ履歴は引き続き一致します。
メニュー バーから [Git] > [View Branch History] (ブランチ履歴の表示) を選んで、現在のブランチの [履歴] タブを開きます。
現在のブランチの [履歴] タブで、元に戻すコミットを右クリックし、[復元] を選んで、選択したコミットによって行われた変更を元に戻す新しいコミットを作成します。
チーム エクスプローラーの [変更] ビューで、[アクション] > [履歴を見る] を選んで、現在のブランチの [履歴] タブを開きます。
現在のブランチの [履歴] タブで、元に戻すコミットを右クリックし、[復元] を選んで、選択したコミットによって行われた変更を元に戻す新しいコミットを作成します。
Git revert
コマンドを使用して、コミットによって行われた変更を元に戻し、元に戻された変更を含む新しいコミットを作成できます。 変更が元に戻されたコミットは、Git 履歴に残ります。
git revert <commit ID>
元に戻す操作が成功した場合、Git によってエディター ウィンドウが開き、新しいコミットのコミット メッセージを入力するように求められます。
元に戻す操作中に競合が発生した場合、Git から通知されます。 競合を解決してから git revert --continue
を実行することも、git revert --abort
を実行して元に戻す操作を取り消すこともできます。
コミット ID を検索する
Git log
コマンドを使用して、コミットの ID を取得できます。 --oneline
フラグを設定すると、出力が省略されます。
git log --oneline <branch>
Git log
コマンドを実行すると、最初に最新のコミットが一覧表示されます。指定したブランチ (指定されていない場合は現在のブランチ) の先端でのコミットから始まり、その後、先祖コミットを逆に反復処理します。 省略された出力の各コミット IDは、コミットを一意に識別する部分的な SHA-1 チェックサムです。 たとえば、git log --oneline main
を実行すると、次のように出力されます。
e745d06 (HEAD -> main) Add a test initialization class
31da50b Add network switch test
0c14391 Add readme file
32e3946 Add project files.
次のステップ
関連記事