77

以下は私のレポのステータスでした。

[~/rails_apps/jekyll_apps/nepalonrails (design)⚡] ➔ gst
# On branch design
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   _layouts/default.html
#   deleted:    _site/blog/2010/04/07/welcome-to-niraj-blog/index.html
#   deleted:    _site/blog/2010/04/08/the-code-syntax-highlight/index.html
#   deleted:    _site/blog/2010/05/01/showing-demo-to-kalyan/index.html
#   deleted:    _site/config.ru
#   deleted:    _site/index.html
#   deleted:    _site/static/css/style.css
#   deleted:    _site/static/css/syntax.css
#   modified:   static/css/style.css
#
no changes added to commit (use "git add" and/or "git commit -a")

偶然にも、私はやったのですがgit checkout -f、今やるべきではなかった変更がなくなりました。

[~/rails_apps/jekyll_apps/nepalonrails (design)⚡] ➔ git co -f
[~/rails_apps/jekyll_apps/nepalonrails (design)] ➔ gst
# On branch design
nothing to commit (working directory clean)
[~/rails_apps/jekyll_apps/nepalonrails (design)] ➔ 

変更を元に戻すことはできますか?

4

13 に答える 13

80

あなたが見ることができるもう一つのことはあなたのIDEを通してです。誤って2つのファイルをチェックアウトし、IDE(netbeans)の「ローカル履歴」を介して変更を戻すことができました。なんという祝福でしょう。

于 2012-02-02T14:06:53.003 に答える
60

現在の作業ディレクトリに他のバックアッププロセスを用意していない限り、これらのプライベートデータ(「インデックスに追加されておらず、コミットされていない」などの「プライベート」、gitには不明)を回復できるとは思いません。

これがGit Aliases pageで提案されていない場合でも、チェックアウト用のある種のエイリアスを主張します (alias rm /bin/rm -i使用法があるように):

[alias]
co = !sh -c 'git stash; git stash apply; git checkout "$@"'

、「 」は、ブライアン・キャンベル回答git stash; git stash applyで使用した「チェックポイント手法」です。

ステイソンはコメントで提案しています:

co = "!git stash push -m \"co backup\"; git stash apply; git checkout \"$@\"" 

注意してください、私は他の人からのバックアップスタッシュを伝えるメッセージを追加しました. –</p>

この問題は、 ycombinator (抽出)でのこの動作に関する議論を思い出させます。


git で大量のデータを失いました。
そのほとんどは、データを削除するときに確認を求めない無害なコマンドに関係しています
たとえば、git checkout filenameは と同等svn revert filenameです。
もちろんgit checkout branchname、まったく違うことをします。
ブランチとファイルが同じ名前を共有している場合、git はデフォルトでブランチを切り替えますが、bash のオートコンプリートが一日を台無しにするのを止めることはできません。

ここにクレイジーなアイデアがあります: 無害なアクションと危険なアクションがある場合、同じコマンドでラベル付けしないでください。


面倒かもしれませんが、これはユーザー エラーであり、設計エラーではありません。git を使用すると、作業コピーを無損失で破棄したい場合、" git stash" だけで済みます。あなたの論理では、 "rm" は、の代わりに
渡すときに確認を求めないため、欠陥があります。まあ、そうだろう。ごめん。-f-i


が、 および とrm somename同等である場合、アナロジーはより正確になります。 それでも、現在のディレクトリに foo というファイルがあるかどうかに応じて、" " が 2 つの完全に異なることのいずれかを行うというのは正しくありません。apt-get updaterm othernamerm -fr othername
get checkout foo


git checkout ...ここに別のクレイジーなアイデアがあります: ' ' をダーティな作業ツリーで実行しないでください。問題が解決しました。
もう 1 つ: ファイル名をブランチ名として再利用しないでください。
正直に言うと、「rm」の不注意な呼び出しで同じ問題が発生し、一日が台無しになりますが、呪いをつぶやいているときは、bash の完了や「 」の動作ではなく、怠惰/愚かさによるものですrm

于 2010-06-02T20:28:03.427 に答える
26

git add以前にこれらのファイルを使用したことがない限りgit stash、残念ながらそうではありません。それらを追加または隠している場合は、 を通じてそれらのハッシュを見つけることができるはずですgit reflog

のこの破壊的な動作に満足したことはありませんgit checkoutgit checkoutおそらく、作業を上書きする前に、この種の stash を自動的に作成する (ファイルが reflog を介してキャプチャされるようにする) ようにすることは、おそらく便利な拡張機能です。

于 2010-06-02T20:16:46.990 に答える
5

Linux で vim を使用している場合は、次のことが当てはまります。

  • ファイルがアクティブなバッファで開かれている場合、vim でファイルをリロードしない限り、ファイルの内容を取得でき、保存することで復元できます。.

  • ファイルがアクティブ バッファで開かれておらず、ダーティである場合は、ソース ディレクトリに .swp ファイルが存在し、.swp ファイルを介して復元可能なコンテンツのコピーも含まれている必要がありますvim -r file.swp

  • ファイルがアンチ バッファでもダーティでもなく、作業コピーが ext3 または ext4 パーティションにある場合、extundeleteは最近削除された .swp ファイルや古いバージョンのソース ファイルを見つけることができる可能性があります。パーティションを読み取り専用として再マウントし、mount -o remount,ro /mnt/point実行します。

    extundelete --recover-directory /path/to/working/copy /dev/sdaX
    

    作業コピーを含むパーティションがルート パーティションである場合、再マウントを拒否し、すべてのサービスを強制終了してみてください。それでもうまくいかない場合は、GRMLなどの Live CD/USB/PXE を使用してシャットダウンおよび起動し、その上。この方法で、失われた 3 つのファイルのうち 1 つを復元することに成功しました。

于 2014-10-08T19:36:01.270 に答える
5

Eclipse を IDEおよびEGitとして使用する場合、ファイルに Team-menu があります。

  1. その中からあなたのファイルを右クリックしてください
  2. リスト項目「チーム」→「ローカルヒストリーを表示」

私の場合、すべてのバージョンが保存名なしでローカルに保存されていることがわかりますが、追跡されていないすべての変更を git 機能から簡単にチェックして、不足しているコードを復元できます。

于 2016-08-30T08:23:50.193 に答える
3

Intellij を使用しています。CTRL+z私にとってはうまくいきます。「ディスクから変更をリロードする」ように求められ、[はい]を押します。

于 2019-09-04T19:53:05.930 に答える
1

IDE を使用していて、元に戻すオプションがある場合は、変更を元に戻すだけで、ディスクからのリロードが元に戻され、変更が元に戻ります。ほとんどの IDE / エディターにはこのオプションがあります。

于 2018-09-18T05:48:33.377 に答える