web-dev-qa-db-ja.com

Git Diff-選択した行またはチャンクを元に戻す方法

Git GUIでは、差分の一部を選択して、それらの行またはチャンクのみをステージングできます。ファイルの変更された行をロールバックする場合のように、私はどのように反対をしますか?通常、これらは偶発的な空白の変更ですが、元に戻したいが、同じファイルの他の部分をステージング/コミットします。

38
Kenoyer130

Git Guiの場合:最初に、[再スキャン]をクリックして、変更されたファイルをスキャンします。次に、ファイル名の左側にあるアイコンをクリックして、コミットするすべての変更をステージングします。次に、デバッグ行を右クリックし、[ステージングからコミット解除]を選択します。

上記の情報: http://nathanj.github.com/gitguide/tour.html

3
Anil

必要なパーツをgit add -pでステージングし、ステージングされていない変更を破棄します(git checkout -- filename)。

Git 1.6.5以降のアップデート

バージョン1.6.5では、Gitは-p/--patchフラグを使用してチェックアウトする方法を学びました。 git checkout -p -- filenameを使用すると、1つのステップでチャンクを破棄できます。

the docs から:

<tree-ish>(または、指定されていない場合はインデックス)と作業ツリーの違いから、対話的にハンクを選択します。次に、選択されたハンクが作業ツリーに逆に適用されます(<tree-ish>が指定されている場合は、インデックスが適用されます)。

これは、git checkout -pを使用して、現在の作業ツリーから編集を選択的に破棄できることを意味します。

69
ellotheth

Git Guiでは

  1. 不要な変更を含むファイル全体をステージングします
  2. 元に戻したいライン/ハンクのステージを解除します
  3. Unstaged Changesペインでファイルを選択し、Commit-> Revert Changesそのファイルへのすべての(ステージングされていない)変更を元に戻す

出典: http://git.661346.n2.nabble.com/Revert-hunk-td4991128.html

15
Leif Gruenwoldt

私が使う git stash -p この目的のために。これには、作業ツリーから削除された変更でスタッシュが作成されるという副作用があります。これは、すばやく復元するのに役立つ場合があります。

3
Matt Zimmerman

Git 2.24以降、Git GUIはステージングと同様に、コンテキストメニューに[ハンクを元に戻す]オプションと[行を元に戻す]オプションを備えています。あなたは素晴らしい追加である「Undo Last Revert」をすることさえできます。

この機能を追加したコミットは次のとおりです: https://github.com/git/git/commit/62bd99934bb2b1a07f786fdf9b94d7b692768e

0
Ronino