5

私はgitを使用して管理するいくつかのコードに取り組んでいます。以前、コミットを使用して、動作するコードのバージョンを保存しました。いくつかの新しい機能が必要であり、設計が不十分だったため、後でコードをやり直すことにしました。動作するようになった後、別の git commit を行いました。git log を実行した後、どのブランチにもいないことがわかりました。というわけで、「git checkout master」をしました。これにより、以前のコードのバージョンに戻り、git ログに最新のコミットが表示されるようになりました。これは大変な作業だったので、自分が行ったことを元に戻し、最新のコードを取り戻す方法があるかどうかを知りたかったのです。よろしくお願いします。

4

2 に答える 2

14

を確認してgit reflog、コミットを見つけてください。

最も安全なのは、「失われた」コミットでブランチを作成し、gitkまたはを使用してすべてがダンディであるかどうかを確認することです。git log -p

git branch recovery HEAD@{1} # use whatever commit you need
git log -p recovery

次に、この新しいブランチをマージしたり、マスターの上にリベースしたり、チェリーピックしたコミットしたりすることができます。gitには、足を撃つための多くの可能性がありますが、その足を再接続する方法もいくつかあります(おそらくあなたの腕)。

マスターで新しいコミットを行っていない場合は、問題のコミットをマージするだけで済みます。これは、gitによる早送りマージとして解決されます。

git merge HEAD@{1} # use whatever commit you need

マスターでの新しいコミットを気にせず、単にマスターブランチをその失われたコミットにリセットしたい場合は、gitresetを使用します。変更を失わないようにするには、最初に作業コピーへの変更を隠しておきます(git stash save

git reset --keep HEAD@{1}

次回、自分がブランチにいないことに気付いたときは、git branch newbranchまたはgit checkout -b newbranch

于 2011-08-31T21:57:41.393 に答える
1

を使用git reflogして、新しいコミットのshaを取得し(またはのような形式で参照できます) 、などをHEAD@{1}使用してコミットをマスターに取り込みます。git cherry-pickgit merge

于 2011-08-31T21:56:52.830 に答える