file があるとしますa.txt
。ある日、私はそれを削除し、コミットし、プッシュしました。
翌日、最後のコミットを元に戻したいと思っていましたa.txt
。を使用してみgit revert
ましたが、使用するとgit blame
、すべての行に復帰コミット ハッシュが表示されます。元の責任履歴は失われます。
ファイルを復元して、ファイルの履歴を保持することはできますか? コミットがプッシュされたので、履歴を変更してはならないことに注意してください。
ありがとう!
file があるとしますa.txt
。ある日、私はそれを削除し、コミットし、プッシュしました。
翌日、最後のコミットを元に戻したいと思っていましたa.txt
。を使用してみgit revert
ましたが、使用するとgit blame
、すべての行に復帰コミット ハッシュが表示されます。元の責任履歴は失われます。
ファイルを復元して、ファイルの履歴を保持することはできますか? コミットがプッシュされたので、履歴を変更してはならないことに注意してください。
ありがとう!
あなたはこれを行うことができます!方法は次のとおりです。
git merge <sha> -s ours
ます。git diff <sha>^..<sha> | git apply
。git checkout -p
うまくいく可能性があります)。これにより、2 つの分岐を持つ履歴が生成されます。1 つはファイルが削除されたもので、もう 1 つはファイルが削除されていないものです。その結果、git は-C -C -C
. (実際、 を使用しても、ファイルは「復元」されません。なぜなら、新しいファイルが以前に存在したファイルのコピーとして-C -C -C
作成されたことを git が認識しているためです。この手法を使用すると、同じファイルをリポジトリに再導入することになります。 )
-C
オプションを 3 回指定して git Blame を実行します。
git blame -C -C -C
これによりgit blame
、以前のコミットでファイルからコピーされたコンテンツが検索されます。
-C|<num>|
に加えて
-M
、同じコミットで変更された他のファイルから移動またはコピーされた行を検出します。これは、プログラムを再編成し、コードをファイル間で移動する場合に役立ちます。このオプションを 2 回指定すると、コマンドはさらに、ファイルを作成するコミット内の他のファイルからのコピーを探します。このオプションを 3 回指定すると、コマンドは任意のコミットで他のファイルからのコピーを追加で検索します。
<num>
オプションですが、Git がそれらの行を親コミットに関連付けるためにファイル間の移動/コピーとして検出する必要がある英数字の数の下限です。デフォルト値は 40 です。複数の-C
オプションが指定 されている<num>
場合、最後の引数が-C
有効になります。
git reset
の代わりに を使用して実行できますgit revert
。git reset
新しいコミットをドロップし、以前のコミットをチェックアウトします。すでに上流にプッシュしている場合、これはお勧めできません。
NAME
git-reset - Reset current HEAD to the specified state
SYNOPSIS
git reset [-q] [<tree-ish>] [--] <paths>...
git reset (--patch | -p) [<tree-ish>] [--] [<paths>...]
git reset [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit>]
DESCRIPTION
In the first and second form, copy entries from <tree-ish> to the index. In the third form, set the
current branch head (HEAD) to <commit>, optionally modifying index and working tree to match. The
<tree-ish>/<commit> defaults to HEAD in all forms.
すでにプッシュしているので:
git reset
、プッシュを使用して強制しgit push -f
ます。