3

1 つの git リポジトリを構成しました。このリポジトリには、より多くのブランチが含まれています。最近、1 つの問題に直面しました。リポジトリのユーザー クローンからプッシュされたいくつかのコミットが失われました。

「git log commitid」を実行するとコミット ID 情報を確認できますが、「git branch --contains commitid」では所属するブランチが表示されません。

また、describe it results 以下を実行すると、すべてのオプションを fsck で実行しましたが、これらのコミットがコミットを絡ませていないように見えます。このコミットが欠落しており、どのブランチにも関連付けられていない理由について、あなたの考えを共有してください。

git describe commitid --all 
changes/01/21112/1

git reflog を実行しましたが、 commit id が表示されません。実際に 1 つのコミットからコミットをチェリー ピックしたので、実際の commitid (このコミットもどのコミットにも属していません) とチェリー ピックされたコミット id を確認できます。実際のコミット ID に対応するものが見つからないため、厳選されたコミット ID を追跡できません

失われたチェリーピックされたコミット ID を見つけるにはどうすればよいですか?

4

1 に答える 1

5

試しましたgit reflogか?

たとえば、コミットが参照されていない場合、git reset実際にはしばらくの間リポジトリに保持され、git gc収集されません。これは、それらがreflogで参照され続けているためです。

これが当てはまるかどうかは、次の場合に確認できます。

$ git fsck --no-reflogs

reflog はあなたを守るためにここにいます。resetこれにより、悲惨な、rebase、または履歴を変更するその他のコマンドをロールバックできます。

これらの失われたコミットを回復したい場合は、reflog から簡単に取得できます。

それらを完全に削除したい場合は、次のようなものを使用できます。

$ git reflog expire --all

しかし、注意してください!それは元に戻せないかもしれません。

于 2012-08-31T07:09:11.590 に答える