作業ディレクトリ内の1つまたは複数のファイルへの変更を部分的に元に戻すことができるコマンドはありますか?
ファイルを何度も編集したが、一部の変更を元に戻してコミット状態に戻したいが、他の変更は元に戻さないことに気付いたとします。
私はgit checkout
そのためのオプションが非常によく機能することを想像していますgit add -p
。つまり、ファイルをハンクごとに調べて、それを保持するかどうかを尋ねます。
回答:
あなたが使うことができます
git add -p <path>
特定のファイルに保持するチャンクをステージングするには、
git checkout -- <path>
ファイルのステージングされたバージョンをチェックアウトすることにより、保持したくない作業ツリーの変更を破棄します。
最後に、あなたは使用することができます
git reset -- <path>
ステージングされたバージョンのファイルを最新のコミットされたバージョンのファイルに戻し、変更をステージングされないままにします。
revert
コマンドを使用すると、ファイル内のどの変更を元に戻すかを選択できますか?私はCVSとGitの経験しか持っていないので、真剣に尋ねます。Gitでは、git checkout -- path/to/file
はそのファイル内のすべての変更を元に戻す単一のコマンドですが、これは上記と同じではありません。
git checkout --patch
あります。git reset --patch
git add --patch
--
通常、オプションの解析の終了を示し、その後に続く引数はすべて文字通りに解釈されることを示します。これは./
、ファイル名が--
。の後にある場合、マイナス記号で始まるファイル名の前に追加する必要がないことを意味します。
git checkout --patch
、差分が逆に表示されます。マイナス記号は作業コピーにテキストを追加し、プラス記号は作業コピーから行を削除します。
gitバージョン> = 1.7.1でできる
git checkout -p
この機能がいつ導入されたかはわかりません。
git reset -p
ステージング領域/インデックスから変更を選択的にステージング解除するためにも実行できることは言及する価値があります。また、これがどのバージョンのGitで導入されたのかも頭からわかりません。
git checkout $file
ファイルの状態を$file
最後にコミットされた状態に戻します。git checkout SHA-1 -- $file
ファイルをSHA-1で識別されるコミットに戻すために使用できると思います。
何回コミットして戻って選択する必要がありますか?1つだけの場合は、その直前にブランチを作成し、コミットしたファイルをチェックアウトしてgit add -p
から、必要な方法でファイルを追加します。次に、元の場所に戻って、一時ブランチからファイルをチェックアウトできます。
あれは:
git checkout -b temp troublesome-commit^
git checkout troublesome-commit -- path/to/file
git add -p path/to/file
git commit -c troublesome-commit
git checkout @{-1}
git checkout temp -- path/to/file
git commit path/to/file
git branch -D temp
他の選択肢は背中を行くとしてコミット編集を含めるgit rebase -i
(マーキングをコミットとしてedit
、次にやって、git reset HEAD^
そしてシェルに戻って落としたときにコミットやり直し)。
選択する必要のある変更が一連のコミットに分散している場合は、それらをパッチ(またはそれらすべてをカバーするパッチ)として抽出し、パッチを手動で編集して、保持したい変更を削除する方がよい場合があります。残差をにフィードしgit apply --reverse
ます。