ステージングされていないファイルのチェックアウトをgitで元に戻すことができます


164

ローカルの作業ツリーにあるファイルの変更をgit checkoutで誤って破棄しました。現在、ファイルはステージングされていません。このチェックアウトを「取り消す」ことは可能ですか?


いいえ、できませんが、Eclipseを使用している場合は、チーム->ローカル履歴
USMを

回答:


105

ファイルが変更されたがまだ追加(ステージング)されていない場合、それは純粋に「プライベート」であると私は信じています。
インデックスまたはHEADバージョンで上書きされた場合、GITで復元できないことを意味します(現在の作業のコピーがどこかにない場合)。

「プライベート」コンテンツは、現在のディレクトリでのみ表示できるコンテンツですが、Gitに登録されていません。


5
「プライベート」ファイルへの変更はgitでは元に戻せないことを理解しています。ただし、ファイルがgitによって(たとえばを介してgit checkout --)変更された場合、その操作を(おそらくを介して)元に戻すことができると思いreflogます。それは間違った期待ですか?
CiprianTomoiagă2016年

2
@CiprianTomoiaga reflogは、過去の参照されていないコミット用です。復元したいものがコミット(またはステージング)されていない場合、reflogは役に立ちません。
VonC 2016年

3
@CiprianTomoiaga(まだ追加されていない)のプライベートコンテンツの場合は、エディターまたはIDE機能のみに依存します。日食の例:help.eclipse.org/neon/…– VonC '27
11/16

5
うわー!信じられない。1つのファイルをチェックアウトする必要があったのでgit checkout folders/subfolders/file、入力するfolderつもりでしたが、すべての作業にアクセスして失った後、誤ってEnter キーを押しました。/は、キーボードのエンターから1cmで、キーボードのレイアウトが異なるマシンを頻繁に切り替えるため、指が新しい位置に慣れるまでに10〜15分かかることがよくあります。gitの本ではgitは作業を失わないための方法であると述べていますが、2018年にgitがファイルをゴミ箱に捨てるとは信じられません。
gman 2018

1
@gman IDEによって提供される「ローカル履歴」についての以下の答えは、作業の回復に役立ちますか?
VonC 2018

173

「プロフェッショナル」IDEを使用している場合は、ローカルの履歴からファイルを復元できる可能性があります。たとえばRubymineでは、ファイルを右クリックして、gitの変更とは関係なく変更の履歴を見ることができます。


36
ちなみに、この機能は、「プロフェッショナル」IDEのJetBrainsファミリー全体で使用できます:Pycharm、IDEA、PHPStorm、Webstorm。今日、私の焼き鳥を保存しました。ありがとう、クリストフ!
ベンロバーツ

6
ありがとうございます。私はWebStormを使用していますが、かなり頻繁に使用していますが、その機能を完全に忘れていました。私はコードの損失に追いついたばかりで、それについては考えていませんでした!
Tyson Phalp 2013

8
日食では、ファイルを右クリックして->比較->現地の歴史
Maragues

5
見事。Sublime2 undoは、ディスク上での誤ったgitチェックアウトによって行われた変更もロールバックしました。
shuckc 2013

8
このスレッドがXCodeの一部の作業を破壊したことを誰かが見つけた場合、自動保存履歴を取得する方法があります。XCode自体には、自動保存履歴を表示するためのメニューエントリはありませんが、保存されます。問題のファイルをTextEditで開いた場合、[ファイル]> [元に戻す]で自動保存の履歴を元に戻して確認できます。
qingu 2014年

66

Sublime Textのようなエディターで作業していて、問題のファイルがまだ開いている場合は、ctrl + zを押すと、gitチェックアウト前の状態に戻ります。


9
この答えは私の日を救います。どうもありがとう!
feyyaz 2016年

私はたった今この偶然にこの修正に出くわし、新しい答えを投稿しようとしていました。Sublimeは、ファイルの変更履歴でファイルの状態を変更するGitをキャプチャしているようです。
Timmah

Ecipseで働いた。
アノマリー

4
Visual Studio Codeでも働いた
intotecho '

44

残念ながら、変更は失われます。プライベートな変更は単に上書きされます。あなたがしなければgit stash事前にチェックアウトし ...

明るい面から考えてみましょう。物事をよりよく実装できるようになりました;)


26

IDEのローカル履歴を確認します。


私の変更をステージングしないという間違いを犯し、チェックアウトを強制しました。Android Studioで自分のローカル履歴を確認し(表示->最近の変更)、最後に行った変更を元に戻しました。ここでの詳細情報jetbrains.com/help/idea/2016.3/...
emen

これはRubyMineで完全に機能し、変更を消去するアクションは「外部変更」として参照されます。このMarcinに感謝します。失われた作業を1時間節約できました。
AndrewSouthpaw 2017年

25

OS Xで開発していますか?Xcodeを使用していますか?あなたは幸運になりそうです!

qunguによるコメントで説明されているように、OS Xは、タイムマシンを使用していない場合でも、ファイルの自動保存されたバージョン履歴を保持します。

したがって、ステージングされていないローカルの変更を不注意git checkout .に吹き飛ばしてしまった場合は、ここでおそらくすべての作業を回復できます。

このスレッドがXCodeの一部の作業を破壊したことを誰かが見つけた場合、自動保存履歴を取得する方法があります。XCode自体には、自動保存履歴を表示するためのメニューエントリはありませんが、保存されます。問題のファイルをTextEditで開いた場合、[ファイル]> [元に戻す]で自動保存の履歴を元に戻して確認できます。

それはすごいことで、昨日、私の一日の仕事について回復しました。


あなたは尋ねるかもしれません、 のgitコマンドラインUIをしない理由、」ソフトウェア工学のために使用され最高のVCSを2016年 2017年 2018年2019年、少なくともファイルを吹き飛ばす前にバックアップしますか?同様に、ご存知のように、過去30年間のよく書かれたソフトウェアツールです。」

あるいは、「なぜこのめちゃくちゃ素晴らしいファイル履歴機能がTextEditでアクセスできるのに、実際に必要なXcodeでアクセスできないのですか?」

…そしてどちらも、私たちの業界についてかなりのことを教えてくれると思います。または、これらのツールを修正してください。どちらが素晴らしいでしょう。


2
これが機能することを確認できます。これにより、作業時間を節約できました。
Bruno Rocha、2018年

関係のあるファイルがModel残念なことに私にとっては
うまくいき

@brahimmモデル?
ベンジョン

1
これは、私にひどい心痛を救いました。どうもありがとうございます。
squarefrog

1
非常に興味深い:ソースファイルを右クリックし、[プログラムから開く]メニューを見ました。TextEdit 1.14とTextEdit 1.6の両方が選択肢としてありました。TextEdit 1.14のみが古いリビジョンに戻すオプションがありました。TimeMachineと同様に、UIは非常に優れていました。
bugloaf

6

VSCODEではctrl + z(元に戻す)がうまくいきました

私がやったgit checkout .のではなくgit add .、すべての私のファイルの変更は失われました。

しかし、今command + z私のMacで使用して、変更を回復し、作業の調子を保存しました。


他の方法はありますか?
Abdul Manan


2

このような状況で効果的な救世主は、Time Machine(OS X)または同様の時間ベースのバックアップシステムです。戻ってその1つのファイルだけを復元できるので、数回節約されました。


1
親愛なるdownvoter-私がこの答えをどのように改善できるか説明していただけますか?
sscirrus 16

1

ちょうどそれが起こって、私は何時間もの作業を含むフォルダ全体をチェックアウトしました!幸い、IDE Netbeansは各ファイルの履歴を保持しているため、手動でいくつか修正する必要があるにもかかわらず、99%のデータを回復できることがわかりました。



0

技術的にはそうです。しかし、特定のインスタンスでのみ。たとえば、コードページが表示されている状態でgit checkoutをクリックすると、間違ったページなどを誤ってチェックアウトしたことがわかります。ページに移動して[元に戻す]をクリックします。(私にとっては、コマンド+ z)、そして古き良きgitチェックアウトを実行する前の状態に戻ります。

これは、ページが閉じている場合は機能せず、次にgit checkoutを押します。実際のコードページが開いている場合にのみ機能します


0

あなたは、端末/で作業する場合、オープンプロンプトcmdとunstaged変更(示されていたすべてのgitのコマンドを使用diffadd -pcheckout -p、など)を、そしてあなたがunstaged変更を見つけることができ、以降の端末/プロンプトcmdを閉じていません前述のgitコマンドを実行した場所までスクロールすると、引き続き使用できます。


0

おい、

私と同じようにあなたはとても幸運な人だとしましょう。エディタに戻って元に戻す(コマンド+ Z for Mac)を実行すると、失われたコンテンツがファイルに表示されます。お役に立てば幸いです。もちろん、これは既存のファイルに対してのみ機能します。


-1

多分あなたの変更は失われません。「git reflog」を確認してください

以下の記事を引用します。

「基本的に、データが保存されているGitの内部で実行するすべてのアクションは、reflogの内部で見つけることができます。Gitはデータを失わないように本当に努力していますが、ます。 git reflogの使用」

詳細を見る:

http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html


3
期待を裏切らないでください-reflogの取得は、意味のある方法でgitとやり取りしている場合にのみ役立ちます。ファイルを編集して、gitチェックアウトで吹き飛ばすだけですか?gitにはチャンスがありませんでした。
ボブ・ギルモア

1
私からの+ 1- git reflogここで言及する価値があると思います。元に戻すことを探していたときに、この答えを見つけましたgit checkout HEAD .-入力するgit reset HEAD .つもりでした-「git reset --soft HEAD〜1」を実行したばかりで、知らなかった約git reflog私がやった仕事を取り戻すことができたので:)
ラッセルイングランド

1
残念ながら、git checkout <revision>とgit checkout <path>は2つのまったく異なる、関連のないコマンドです。前者はローカルの変更を保持し、後者は保持しません。
湖の
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.