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ます。