20

これが私がやりたいことです。前の 2 つのコミットに戻りたいのですが、そのコミットで変更されたファイルを新しいコミットとして戻すことができます。しかし、最後のコミットを失いたくありません。私の最後のコミットにはコードにいくつかの間違いがありますが、今のところそれを保持したいと思います。

いくつかのドキュメントを読みましたが、頭をリセットしたときに何が起こるかを明確にしたものはありませんでした。たとえば、リセットする (戻る) までのすべてのコミットを失いますか?

これがどのように機能するかを理解しようとしていますが、 git とコマンドについてかなり混乱してrevertresetますcheckout

コミットするのではなく、最後のコミットを隠しておくべきだったことに気づきましたが、それは今のところ別の話です。

4

3 に答える 3

19

戻りたい場合、たとえば 2 つ前のコミットと言うと、単にgit checkout HEAD~2. これにより、すべてが当時の状態になります。ブランチmasterにいた場合git checkout masterは、現在に戻ります。ただし、現在の状態を維持したいが、そこで新しい開発ブランチを開始したい場合は、そこにgit checkout -b HEAD~2新しいブランチを開始します。マスターを巻き戻したいが、現在の未完成/壊れた作業を失いたくない場合は、次のようにします。

git branch wip           # New branch ends a current tip
git reset --hard HEAD~2  # Old branch rewound, get files from then
于 2013-03-12T19:20:00.130 に答える
11

revert古いコミットによって行われた変更を元に戻す新しいコミットを作成します。reset --hard現在のブランチの HEAD を指定されたコミットに変更します。checkout作業コピーを指定されたブランチまたはコミットに切り替えます。

ブランチを古いコミットにリセットすると、新しいコミットが他のブランチの一部でない場合、またはタグの祖先でない場合、新しいコミットは失われます (ただし、それらには引き続きアクセスできreflogます)。

何をする必要があるかは明確ではありません。最も可能性の高い解決策は、revert(古いコミットまたは一連のコミットを完全に元に戻す) およびrebase -i(古いコミットを変更するか、履歴から削除する) です。

于 2013-03-10T23:39:33.903 に答える
0

$ git reflog前のコミットからのプッシュを強制して最後のコミットを失った後、前の状態に戻るのに役立つ最後のハッシュを確認できます。

また:

$ git fsck --no-reflog
$ git show <hash>
$ git checkout -b <new-branch> <hash>

GL

ソース

于 2020-08-19T17:11:26.787 に答える