逃亡者のステータスウィンドウからファイルの変更を破棄するにはどうすればよいですか?


33

すると逃亡者-プラグインの ステータスウィンドウ、使用してアクセスし:Gstatus、それを使ってファイルの差分変更することが可能ですDし、使用してコミットするためのファイルをトグル-

変更を破棄するための同様のショートカットはありますgit checkout -- filenameか?

更新:

逃亡者のgithubページで機能リクエストが見つかりました問題#97:ファイルをチェックアウト/削除するためのショートカット

それによると、好ましい方法は :Gread :w

アップデート2:

2014年6月以降、以下のAnsonのU回答に従って使用することができます

更新3:2019年1月3日 以降、キーバインドはマップされますX

回答:


27

この機能は2014年6月に追加され、デフォルトでにマップされUます。

この情報は、以下のヘルプファイルにあります:h :Gstatus

     U     |:Git| checkout HEAD

機能のリクエストとディスカッション:https :
//github.com/tpope/vim-fugitive/issues/97

コミット:https :
//github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63


それが文書化されていない場合、安全ではないと解釈される可能性があります。文書化されていない魔法のキーストロークが原因で、ローカルの変更を破壊したことを見つけるのは難しいことではないでしょうか?
-sehe

2
2019更新今ですX
Oguz Bilgic

編集権限を持つ人は、親切にXに編集しますか?
chriz

15

fugitiveGreadコマンドを使用して、バッファーの内容をバッファーのファイルのさまざまな代替バージョンに置き換えることができます(つまり、これは:Gstatusバッファーからではなく、ファイルのバッファーから行う必要があります)。

  • :Gread(引数なし)は、インデックスからのファイルのバージョンを使用します。
  • :Gread - HEADコミットからのファイルのバージョンを使用します。

逃亡者がサポートする:help fugitive-revision他の改訂仕様のリストについては、ドキュメントを参照してください(上記の2つはおそらく最もすぐに役立つものです)。

:Greadワークフローは次のように進行します:

  1. :Gread
  2. 逃亡者は現在のバッファをクリアし、インデックスからコンテンツを読み込みます
  3. 結果:バッファはインデックスと同じ内容になりました。作業ツリーファイルは変更されません。
  4. フォローアップし:wて、作業ツリーにファイルを保存できます(または:Gread|w、すぐに保存することがわかっている場合に使用します)。

:Git checkout -- %ワークフローは次のように進行します:

  1. :Git checkout -- %
  2. Gitは、インデックス内のファイルのバージョンを作業ツリー内のファイルにコピーします。
  3. Vimは、ファイルがエディターの外部で変更されたことに気づき、無視するかリロードするように求めます。
  4. Vimにファイルをリロードするよう指示します。
  5. 結果:作業ツリーファイルとバッファの両方に、インデックスの内容が含まれるようになりました。

要約::Gread「編集が開始されてからファイルが変更されました」というプロンプトを回避し、作業ツリーでファイルをいつ変更するかを決定できます。


バッファーが作業ツリーのファイルではなくファイルのインデックスステージを表す場合、インデックス:Greadのステージ0ではなく作業ツリーのディスクに存在するファイルのコンテンツから読み取ります。


ファイルを元に戻すgstatusのマッピング:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor 14年

1

ファイルを元に戻すgstatusのマッピング:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>

これはうまく機能しますが、唯一の欠点は、ファイルがディスク上で変更されたというダイアログが表示され、リロードしたい場合です。静かだったらいいと思う。
tidbeck 14

1
ファイルが実際に元に戻されていることを確認できるので、IMOはさらに優れています。ただし、自動サイレントリロードは「autoread」オプション(:help autoread)で実行できます。それ以外は、bufdo e上記の範囲内で可能auです。
majkinetor 14

0

さて、試しました:help fugitiveか?

どうやら、このGit機能のショートカットはありません。


はい、しました。まだ存在していた機能がヘルプで見つからなかったことがありました。あなたは、プログラム/プラグインのヘルプにない機能について決して尋ねるべきではないとあなたの意見はありますか?
tidbeck

はい、それは私にも起こりました。私はできた:callが、コマンドが関連付けられていない機能がありました。プラグインの名前を覚えていません... Align?とにかく、私の意見は、周りに尋ねる前にドキュメントを読むべきだということです。あなたがやった。だからそれはクールだ。しかし、ドキュメントを読んだ後の論理的な2番目のステップは、プラグインのソースを調べ、そこに有用な機能があるかどうかを確認するIMOです。あなたはそれをすべきです。しかし、知る限りでは、逃亡者はまったく対処しないgit checkoutため、チャンスはわずかです。おそらくにフォールバックする必要があります:!git checkout -- filename
ロメインル

わかりました、ありがとう。あなたはソースコードを見ることに関して有効なポイントを作ると思いますが、同時にソースコードでのみ情報が利用できる場合、それはここで有効なQAである可能性があります。あなたの答えを受け入れ、を使い続けます:Git checkout -- %
tidbeck

0

vimとは何の関係もありませんが、私が時々することをあなたに伝えることを考えてみてください。

$ git status
...
#
#   modified:   .rvmrc
#   modified:   app/views/admin/base/index.html.erb
#   modified:   config/routes.rb
#
...

$ # mouse-copy the files i want to reset, and paste them into the next command

$ cat | xargs git checkout
app/views/admin/base/index.html.erb
config/routes.rb
^D

すぐに仕事を終える。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.