gitコミットされていない、または保存されていないすべての変更を元に戻します


834

最後のコミット以降のすべての変更を元に戻そうとしています。私が試したgit reset --hardgit reset --hard HEAD表示した後、このポストを。ヘッドは18c3773になりましたが、ローカルソースを見ると、すべてのファイルがまだ残っています。何が欠けていますか?


1
これは、Githubから直接提供された優れたリソースです
。Git

理解しやすく、読みやすい:git-scm.com/book/en/v2/Git-Basics-Undoing-Things
MyTitle

回答:


1620
  • これにより、ステージングした可能性のあるすべてのファイルのステージングが解除されgit addます。

    git reset
    
  • これにより、ローカルのコミットされていない変更がすべて元に戻ります(リポジトリルートで実行する必要があります)。

    git checkout .
    

    コミットされていない変更を特定のファイルまたはディレクトリのみに戻すこともできます。

    git checkout [some_dir|file.txt]
    

    コミットされていないすべての変更を元に戻す別の方法(タイプを入力するより長くなりますが、任意のサブディレクトリから機能します):

    git reset --hard HEAD
    
  • これにより、追跡されていないローカルファイルがすべて削除されるため gitで追跡されたファイルのみが残ります。

    git clean -fdx
    

    警告: !で-x 指定されたファイルを含む、無視されたファイルもすべて削除されます.gitignore。あなたは、使用したい場合があり-n、削除するファイルのプレビューのために。


要約すると、以下のコマンドを実行することは、基本的にgit clone元のソースからのフレッシュと同じです(ただし、何も再ダウンロードしないため、はるかに高速です)。

git reset
git checkout .
git clean -fdx

これの一般的な使用方法は、ツリーが完全にクリーンであることを確認する必要があるビルドスクリプトであり、変更やローカルで作成されたオブジェクトファイルやビルドアーティファクトがなく、非常に高速に動作させ、再作成しないようにする必要があります。リポジトリ全体を毎回複製します。


その通りです。ダウンロードしたすべての依存関係と.ideaフォルダーを削除するため、プロジェクトを数回開始する必要がありました。より良いソリューションが必要です。
EresDev 2018

2
@EresDev、実行する必要はありません。git cleanコミットされていない変更は取り消されますが、追跡されていないファイルや追加されたファイルはすべて保持されます。ただし、追跡されていないファイルの一部が干渉している可能性があるため、ビルド結果に影響を与える可能性があります。たとえば、.ideaディレクトリが破損した場合はどうなりますか?
mvp

git reset保存する必要のある変更があること
Daniel Springer

1
実行すると、git clean -fdx削除されました私node_modules.env、素晴らしい
fires3as0n

1
@ fires3as0n他に何を期待しましたか?これは当然のことでした。答えにも警告があります。
リシャフ

148

コミットされていないすべての変更を「元に戻す」場合は、次のコマンドを実行します。

git stash
git stash drop

追跡されていないファイルがある場合は(を実行して確認してくださいgit status)、次のコマンドを実行してこれらを削除できます。

git clean -fdx

git stashstash @ {0}になる新しいstashを作成します。最初に確認したい場合git stash listは、実行してスタッシュのリストを表示できます。次のようになります。

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

各スタッシュは、前のコミットメッセージにちなんで名付けられています。


2
確かに良い解決策ですが、後でコミットされていない変更が表示されていたため、git add .before を使用して変更をステージングする必要がありますgit stashgit stash
EresDev


12

私はソースツリーを使用しています... 2つの簡単な手順で、コミットされていないすべての変更を元に戻すことができます。

1)ワークスペースファイルのステータスをリセットするだけ

ここに画像の説明を入力してください 2)すべてのアンステージファイルを選択し(コマンド+ a)、右クリックして[削除]を選択します

ここに画像の説明を入力してください

とても簡単です:D


リセットしてからブランチを変更し、リセットされたブランチをリベースすると、これは害になります。リセットは便利ですが、コミットされていない変更を削除するために使用しないでください。コミットされていない変更をドロップする場合は、スタッシュしてスタッシュをドロップします。
Dinu Nicolae

10

私がすることは

git add . (adding everything)
git stash 
git stash drop

一発ギャグ: git add . && git stash && git stash drop


これは最高です
Madrugada

7

ここにアクセスした人が元に戻すことができるかどうかを検索するためにgit clean -f -dEclipseで作成されたファイルによってでが削除され、は、

ローカルの履歴から復元」を参照して、UIから同じことを行うことができます。ローカルの履歴から復元


3
私は反対票を投じませんでしたが、あなたの答えはあなたの意図がはっきりしていません。回答の最初の文を言い換えると役立つでしょう。
Mark Schultheiss

5

1つのコミットから新しいコミットに移行する状態

0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed

状態遷移のアクション

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"

差分を確認

0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD

最後のコミットに戻す

2->1: git reset
1->0: git checkout .     #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx     #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD

何も再ダウンロードせずにgit cloneと同等

git reset && git checkout . && git clean -fdx

これが質問とどのように関連しているかはわかりません。これは、実際の内容を含まない、奇妙なレシピのシリーズです。
mvp 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.