HOWTO · Git

ローカル Git の変更を削除するために使用されるさまざまな方法

Git でローカルの変更を排除するために使用されるさまざまな方法。

この記事では、Git でローカルの変更を破棄するために使用できるさまざまな方法について説明します。 リポジトリのクローンを作成したと仮定して、次のローカルの変更をなくす方法を説明します。

  1. 段階的な変更
  2. ステージングされていない変更
  3. 追跡されていない変更
  4. コミットされた変更
  5. コミットおよびプッシュされた変更

ローカル Git の変更を削除するために使用されるさまざまな方法

Git リポジトリのクローンを作成し、いくつかのファイルに変更を加え、コミットのためにファイルをステージングしたと仮定すると、どのように同じものを破棄するのでしょうか?

--hard フラグを指定した git reset コマンドを使用して、ステージングされた変更を破棄できます。 以下に示すようにコマンドを実行します。

$ git reset --hard

次のシナリオでは、リポジトリ内のいくつかのファイルに変更を加えましたが、まだコミットのためにステージングしていません。 これらの変更をどのように破棄しますか?

2つのオプションがあります。 git reset --hard コマンドまたは git checkout <file> コマンドのいずれかを使用できます。 複数のファイルを扱っている場合は、以下に示すように後者を実行します。

$ git checkout .

これにより、Git はすべてのファイルを最後にコミットされた状態に復元するように指示され、ステージングされていない変更が破棄されます。

新しいファイルをリポジトリに導入した別のシナリオを考えてみましょう。 これらのファイルは、追跡されていないファイルに分類されます。

これらのファイルを削除するにはどうすればよいですか?

git clean コマンドがその仕事をします。 コマンドを実行する方法は次のとおりです。

$ git clean -f

このコマンドの効果を元に戻すことはできません。 コマンドを予行演習として実行して、何が失われるかを確認することをお勧めします。

以下の図のようにコマンドを実行できます。

$ git clean -f -n

-d フラグを追加して、追跡されていないディレクトリを削除できます。

ボーナスヒント

変更を破棄するのではなく、インデックスから除外したい場合は、隠しておくことができます。 Git でのスタッシングとは、インデックスからの変更を別の場所に安全に保存することを意味します。

それらを戻す必要がある場合は、git stash pop コマンドを実行します。

すでにいくつかの変更をコミットしており、それらを削除する必要がある場合はどうすればよいでしょうか?

この時点で、HEAD ポインターを最近作成されたコミットの親ノードに移動する必要があります。 以下に示すように、git reset --hard コマンドを使用します。

$ git reset --hard HEAD~1

これにより、HEAD@{0} でのコミットによって導入された変更が取り消されます。

git reset --hard@{u} を実行して、ブランチ内のローカル コミットを破棄し、上流の追跡ブランチと同一にすることもできます。

変更を既にコミットしている場合は、ファイルに導入された変更を元に戻すコミットを作成し、それをリモートにプッシュできます。

$ git revert <commit-hash>

これにより、新しいコミットが作成され、リモートにプッシュできます。

一言で言えば、ローカルの Git の変更をなくすために採用できるさまざまな方法があります。 公開リポジトリを操作するときは注意してください。