回答:
あなたは直接それを行うことができますgit checkout -p
。以下のダニエル・シュッツバッハの回答を参照してください。
以前の回答(checkout -p
導入前):
あなたはこのようにそれを行うことができます:
git add -i
(保持するハンクを選択します)
git commit -m "tmp"
これで、保持したい変更のみを含むコミットが作成され、残りはステージングされません。
git reset --hard HEAD
この時点で、コミットされていない変更は破棄されているので、コミットしたままにしておく変更がクリーンな作業ディレクトリになっています。
git reset --mixed HEAD^
これにより、最後のコミット(「tmp」)が削除されますが、変更は作業ディレクトリにステージングされずに保持されます。
EDIT:交換し--soft
て--mixed
、ステージング領域をクリーンアップします。
私はあなたがそれを最も簡単に行うことができると信じています:
git checkout -p <optional filename(s)>
マンページから:
−p, −−patch Interactively select hunks in the difference between the <tree−ish> (or the index, if unspecified) and the working tree. The chosen hunks are then applied in reverse to the working tree (and if a <tree−ish> was specified, the index).
This means that you can use git checkout −p to selectively discard
edits from your current working tree.
a
、パッチモードのオプションを使用してファイル全体を破棄すると、これらのエラーが表示されますが、git checkout -- <file>
期待どおりに機能します。誰もが理由を知っていますか?
git diff
ファイルを実行し、結果の差分を保存し、編集して保存したい変更を削除し、それを実行してpatch -R
残りの差分を元に戻すことができます。
git diff file.txt> patch.tmp #patch.tmpを編集して、保持するハンクを削除します パッチ-R <patch.tmp
git diff
変更されたファイル全体を示す別のコメントで言及します。これは通常、以前とは異なる行末を使用してファイルを保存した場合に発生します。これによりpatch
、パッチファイルが拒否されます。それは何が起こったのでしょうか?
あなたが望むように見えます
git revert --no-commit $REVSISON
次に使用できます
git diff --cached
コミットする前にどのような変更が行われるかを確認する(元に戻すとは、過去の変更の逆を複製する、順方向のコミットに過ぎないため)
純粋なGitリポジトリを使用している場合は、目的に応じて、インタラクティブなリベース(git rebase -i
)を使用して不要なコミットに戻り、コミットを遡及的に編集して、望ましくない変更が発生しないようにすることができますが、唯一のあなたがいる場合のために、一般的にthatsの知っているあなたは再びそれを見てみたいことは決してないだろう。
質問をもう一度読んでみると、以前にコミットされた変更ではなく、作業ツリーにある変更を元に戻したいようですが、他のいくつかの回答は私の読みが間違っているように聞こえます。明確にできますか?
変更が作業コピーだけにある場合、これを行う最も簡単な方法は、保持したい変更をステージングすることです。
git add -i <file>
次に、インデックスバージョンをチェックアウトして、保持したくない変更を破棄します。
git checkout -- <file>
次に、変更をまだステージングしたくない場合は、ステージングを解除します。
git reset -- <file>
このレシピは、選択したファイル(または指定したファイル)の変更のみを元に戻し、元に戻す必要がある一時的なコミットを作成しません。
以前のコミットで行われた変更の一部のみを選択的に適用する場合は、最初にファイルを以前のコミットされた状態にリセットできます。
git reset <commit_before_first_unwanted_change> -- <file>
次に、前のレシピに従って、git add -i <file>
保持したい変更をステージングしgit checkout -- <file>
、不要な変更をgit reset -- <file>
破棄して、変更を「ステージング解除」します。
ここで回答に記載されているコマンドラインオプションは、ファイルがssh端末を介してアクセスしているサーバー上にある場合に便利です。ただし、ファイルがローカルマシンにある場合は、次の方法を使用します。
netbeansエディター(gitサポートに付属)でファイルを開きます。Netbeansは、行番号に赤、緑、青のマークを付けて、(それぞれ)削除/追加/変更された場所を示します。
これらのマークのいずれかを右クリックすると、その変更を元に戻すオプションが表示されます。さらに、赤と青のマークを右クリックして、古いバージョンをポップアップで確認できます。