回答:
他の方法もあるかもしれませんが、このアプローチでは、チャンクを追加するだけではありません。そのため、私はそれを頻繁に使用する傾向があります。
:Gdiff
コマンドを実行します。元のウィンドウの左/上に現在インデックスにある現在のファイルのバージョンで分割を開きます。
元のウィンドウ(右または下のウィンドウ)で、必要な変更を視覚的に選択しgit add
ます。
:diffput
範囲を操作できるコマンドを実行します。(dp
キーはビジュアルモードでは機能しません。)
インデックスのファイルを更新するための変更を保存する2番目のウィンドウを閉じます。ここで、保存する前に好きなように編集できます。ファイルの元のバージョンまたは新しいバージョンと完全に一致する必要はありません。
:diffput
変更の構造によっては、期待する結果が常に得られるとは限らないことに注意してください(特に、変更の連続したブロックの一部のみをコミットする場合)。コミットを検証することを忘れないでください。ただし、ほとんどの実際的な状況では問題なく動作します。
Vimcastsには、Fugitive.vimに関する素晴らしいシリーズがあります。エピソードFugitive.vim-gitインデックスでの作業が質問に最も役立ちます。
を使用:Gdiff
して、ファイルの一部のみをステージングできます。実行:Gdiff
すると、現在のファイルとステージ/インデックスが「差分」で表示されます。あなたは、単に(Vimの差分コマンドを使用することができdp
、do
、:diffput
、および:diffget
、ステージ/インデックスに塊を移動します)。次に、他のバッファー:w
/ と同じようにステージ/インデックスファイルを書き込みます:x
。
他のプラグインを使用するソリューションについて具体的に質問したように、変更の表示、ステージング、およびコミットを中心とするGitプラグイン(他のエディターの人気のあるMagitプラグインに基づく)であるvimagitを使用してビジュアルセレクションをステージングすることもできます。
Vimagitを使用してビジュアルセレクションをステージングするには:
:Magit
コマンドを実行して、リポジトリ内の変更されたすべてのハンクを表示する新しいバッファを開きます(1つのファイルだけではありません)。
ステージングしたいラインを見つけてvisual
選択を行い、
「ステージ」マッピングを押しますS
。
vim-gitgutter
ステージコンプリートハンク
<Leader>hs
または:GitGutterStageHunk
追加のみのハンクのステージ部分(2019年8月以降)
ビジュアルモード
{Visual}<Leader>hs
:'<,'>GitGutterStageHunk
'<,'>
いつものように挿入されます)範囲
:42,45GitGutterStageHunk
プレビューウィンドウを介して任意のハンクのステージパーツ(2019年8月以降)
<Leader>hp
:wincmd P
<Leader>hs
または:GitGutterStageHunk
更新日:17.8.2019最近のコミットbc1d28dおよびb036fcfによる
:Gstatus
+D
を使用して、fugitiveでも同じことを行います。このようにして、変更したファイルのリストから操作中のファイルを選択することもできます。