Gitで特定のハンクをインタラクティブにアンステージするにはどうすればよいですか?


106

gitで、インデックスにステージングされた同じファイルの2つのハンクがある場合、それらの1つを対話的にアンステージングするにはどうすればよいですか?

ファイル全体のステージングを解除し、保持したいハンクを再ステージングする、または手動で作業コピーへの変更を元に戻し、それらの元に戻した変更をインタラクティブに追加する方法はありますか?

回答:


135

試してみてくださいgit reset --patch filenameドキュメントgit add --patchによると、これはの逆を行う必要があります。短い形式-pは両方のコマンドでも機能します。


私のバージョンにはそれがあるとは思いません(1.6.3.3です)が、これは正解のようです。
Andrew Grimm

2
その場合(そして何らかの理由でアップグレードできないと仮定した場合)、を使用git stash save --keep-indexして、現在の作業コピーの変更を保存およびリセットすることをお勧めします。次に、ファイルをリセットして、不要な変更を取り消すことができます。最初にファイルを一時的な場所にコピーすると、を使用diffして、元に戻した変更を保存できます。その後、ファイルを再び追加できます(不要な他の変更を隠しておいたため、インタラクティブな追加は必要ありません)。git stash pop古い変更を取り戻し、元に戻した変更diffを適用するために使用します。かなり扱いにくい... :-(
Aasmund Eldhuset

The short form -p also works for both commands...つまりgit reset -p filename
Nawaz

1
@Nawaz:正解です。そのgit add -p filenameファイルから変更をgit reset -p filename選択的にステージングし、変更を選択的にアンステージングします。またgit checkout -p -- filename、ファイルから変更を選択的に破棄できるもあります。警告:のそれぞれaddreset2の他を元に戻すために使用することができますが、あなたがこのフォームを使用している場合はcheckout変更を破棄し、あなたはそれを取り戻すことはできません。
Aasmund Eldhuset

2

git gui対話的にハンクまたはラインをステージングまたはステージング解除するための適切なGUIがあります。よりきれいな/より良いGUIクライアントがgit guiありますが、軽量、組み込み、クロスプラットフォーム(lin、win、mac)です。

https://git-scm.com/docs/git-gui

ハンクを右クリックするだけで、ステージング/ステージング解除できます。線の場合は、まず線を強調表示してから右クリックします。


-1

GitXには、ファイルのチャンクのステージングを解除するための素晴らしいUIがあります。 ここに画像の説明を入力してください

公式クライアントはしばらくの間メンテナンスされていませんが、より多くの機能を備えたGitHubでの分岐がいくつかのサークルで人気があります。(それについてのブログ記事


1
そこにいるWindowsユーザーのために、Git Extensionsにも同様に素晴らしいUIがあります。
Aasmund Eldhuset 2011年

4
組み込みもそうですが、git gui「nice」という単語を使用するかどうか確信がありません;)
MatrixFrog

1
SourceTree(Windows + Mac)にもこのための素晴らしいUIがあります。
chrnola 2014

ここで、より最近のグラフィカルGitクライアントについて触れておきます。GitKrakenは美しく、これをサポートしています(ただし、商用利用には高額の料金がかかります)。GitHubのGitHubデスクトップは無料で美しく、ハンクのステージングとステージング解除を簡単にサポートします。GitKrakenとGitHub Desktopはどちらもクロスプラットフォームですが、どちらもオープンソースではありません。
jdgregson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.