884

gitで特定のコミットにロールバックするにはどうすればよいですか?

誰かが私に与えることができる最良の答えはgit revert、目的のコミットに到達するまで X 回使用することでした。

たとえば、20 コミット前のコミットに戻したい場合は、20 回実行する必要があります。

これを行う簡単な方法はありますか?

このリポジトリは公開されているため、リセットを使用できません。

4

11 に答える 11

1309

これを試して:

git checkout [revision] .

[revision]コミット ハッシュです (例: 12345678901234567890123456789012345678ab)。

.最後に、非常に重要なことを忘れないでください。これにより、ツリー全体に変更が適用されます。このコマンドは、git プロジェクトのルートで実行する必要があります。サブディレクトリにいる場合、このコマンドは現在のディレクトリ内のファイルのみを変更します。それからコミットすると、あなたは良いはずです。

これを元に戻すには

git reset --hard 

これにより、作業ディレクトリとステージング領域からすべての変更が削除されます。

于 2010-01-05T17:07:42.767 に答える
222

特定のコミットにロールバックするには:

git reset --hard commit_sha

10 件のコミットをロールバックするには:

git reset --hard HEAD~10

履歴を書き換えたくない場合は、次の投稿のように「git revert」を使用できます

Git リポジトリを以前のコミットに戻すには?

于 2013-02-14T11:01:10.230 に答える
96

さて、問題は、「ロールバック」とはどういう意味ですか? reset公開されているためにコミット履歴をそのまま保持したい場合は、作業コピーに特定のコミットを反映させたいということですか? git checkoutおよびコミット ハッシュを使用します。

編集:コメントで指摘されたようにgit checkout、ブランチを指定せずに使用すると、「ブランチなし」状態になります。git checkout <commit> -b <branchname>ブランチへのチェックアウト、またはgit checkout <commit> .現在のブランチへのチェックアウトに使用します。

于 2010-01-05T17:04:21.447 に答える
11
git read-tree -um @ $commit_to_revert_to

やります。「git checkout」ですが、HEAD を更新しません。

で同じ効果を得ることができます

git checkout $commit_to_revert_to
git reset --soft @{1}

便利なコマンドを一緒に並べたい場合。

これらにより、ワークツリーとインデックスが目的の状態のままになり、git commit終了することができます。

于 2016-02-06T20:14:32.593 に答える
3

あなたがプロジェクトに取り組んでいて、1日ほど経ったとしましょう。1 つの機能でまだエラーが発生していることに気付きました。しかし、エラーの原因となった変更が何であるかはわかりません。したがって、以前の作業コミットを釣り上げる必要があります。特定のコミットに戻すには:

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .

わかりましたので、コミットがうまくいきます。もうエラーはありません。あなたは問題を特定しました。これで、最新のコミットに戻ることができます:

git checkout 792d9294f652d753514dc2033a04d742decb82a5 .

そして、エラーが発生する前に特定のファイルをチェックアウトします (私の場合、Gemfile.lock の例を使用します)。

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock

そして、これはコミットで作成したエラーを処理する 1 つの方法であり、後になってエラーに気付くことはありません。

于 2018-09-21T21:03:52.430 に答える
1

これを行う例を次に示します

    cd /yourprojects/project-acme 


    git checkout efc11170c78 .
于 2019-03-06T14:27:50.703 に答える
1

何が変わったのかわかりませんが、オプションなしで特定のコミットをチェックアウトすることはできません--detach。私のために働いた完全なコマンドは次のとおりです。 git checkout --detach [commit hash]

デタッチされた状態から戻るには、ローカル ブランチをチェックアウトする必要がありました。git checkout master

于 2017-02-22T11:45:50.063 に答える