gitで特定のコミットにロールバックするにはどうすればよいですかですか?
誰かが私に与えることができる最良の答えgit revert
は、希望するコミットに到達するまでX回使用することでした。
それで、20コミット前のコミットに戻したいとしましょう。20回実行する必要があります。
これを行う簡単な方法はありますか?
このリポジトリは公開されているため、リセットを使用できません。
gitで特定のコミットにロールバックするにはどうすればよいですかですか?
誰かが私に与えることができる最良の答えgit revert
は、希望するコミットに到達するまでX回使用することでした。
それで、20コミット前のコミットに戻したいとしましょう。20回実行する必要があります。
これを行う簡単な方法はありますか?
このリポジトリは公開されているため、リセットを使用できません。
回答:
これを試して:
git checkout [revision] .
[revision]
コミットハッシュはどこですか(例:)12345678901234567890123456789012345678ab
。
.
最後に、非常に重要なことを忘れないでください。これにより、ツリー全体に変更が適用されます。このコマンドはgitプロジェクトのルートで実行する必要があります。サブディレクトリにいる場合、このコマンドは現在のディレクトリのファイルのみを変更します。次にコミットすると、あなたは元気になるはずです。
これを元に戻すことができます
git reset --hard
作業ディレクトリとステージング領域からすべての変更が削除されます。
特定のコミットにロールバックするには:
git reset --hard commit_sha
10個のコミットをロールバックするには:
git reset --hard HEAD~10
履歴を書き換えたくない場合は、次の投稿のように「git revert」を使用できます
さて、質問は、「ロールバック」とはどういう意味ですか?reset
公開されていないためにコミットできず、コミット履歴をそのままにしたい場合は、作業コピーに特定のコミットを反映させたいだけですか?使用git checkout
とコミットハッシュ。
編集:コメントで指摘したようにgit checkout
、ブランチを指定せずに使用すると、「ブランチなし」の状態になります。git checkout <commit> -b <branchname>
ブランチgit checkout <commit> .
へのチェックアウト、または現在のブランチへのチェックアウトに使用します。
git checkout
-彼は彼が望むどんなブランチ(現在または新しい)に自由にチェックアウトできます。あいまいにならないように回答を更新します。
git reset
いる場合は、それらのファイルを削除する必要があります。これは、実行したくないということです。別のブランチで実行してみてください:git checkout <commit> -b <branchname>
、そのブランチに停滞しているファイルはありません。
元のポスターは次のように述べています:
誰かが私に与えることができる最良の答え
git revert
は、希望するコミットに達するまでX回使用することでした。それで、20コミット前のコミットに戻したいとしましょう。20回実行する必要があります。
これを行う簡単な方法はありますか?
このリポジトリは公開されているため、リセットを使用できません。
git revert
X回使用する必要はありません。git revert
は引数としてコミット範囲を受け入れることができるため、コミット範囲を元に戻すには一度だけ使用する必要があります。たとえば、最後の20件のコミットを元に戻す場合は、次のようにします。
git revert --no-edit HEAD~20..
コミット範囲HEAD~20..
はの略でHEAD~20..HEAD
、「HEADコミットの20 番目の親から開始し、それ以降のすべてのコミットをHEADまで戻す」ことを意味します。
それらはマージコミットではないと想定して、最後の20のコミットを元に戻します。マージコミットがある場合、それらをすべて1つのコマンドで元に戻すことはできません。それらを個別に元に戻す必要があります
git revert -m 1 <merge-commit>
範囲をgit revert
使用してgitバージョン1.9.0 を使用してテストしたことにも注意してください。古いバージョンのgitを使用しているgit revert
場合、で範囲を使用しても機能しない場合があります。
この場合、git revert
が優先されgit checkout
ます。
と言うこの回答とはgit checkout
異なり、git revert
は実際には、元に戻すコミットのいずれかに追加されたファイルをすべて削除することに注意してください。これにより、一連のリビジョンを元に戻す正しい方法になります。
ステップ1:コミットのリストを取得する:
git log
次の例のようなリストが表示されます。
[Comp:Folder User$ git log
commit 54b11d42e12dc6e9f070a8b5095a4492216d5320
Author: author <author@gmail.com>
Date: Fri Jul 8 23:42:22 2016 +0300
This is last commit message
commit fd6cb176297acca4dbc69d15d6b7f78a2463482f
Author: author <author@gmail.com>
Date: Fri Jun 24 20:20:24 2016 +0300
This is previous commit message
commit ab0de062136da650ffc27cfb57febac8efb84b8d
Author: author <author@gmail.com>
Date: Thu Jun 23 00:41:55 2016 +0300
This is previous previous commit message
...
手順2:必要なコミットハッシュをコピーして、チェックアウト用に貼り付けます。
git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f
それで全部です。
git read-tree -um @ $commit_to_revert_to
それを行います。「git checkout」ですが、HEADは更新されません。
あなたは同じ効果を達成することができます
git checkout $commit_to_revert_to
git reset --soft @{1}
便利なコマンドを一緒に文字列化したい場合。
これらにより、ワークツリーとインデックスが望ましい状態になり、git commit
終了するだけで済みます。
DETACHED HEADを使用して特定のコミットまでX時間をロールバックしたい場合(つまり、何も台無しにできないことを意味する場合)、必ず以下を使用します。
(Xを元に戻したいコミットの数に置き換えます)
git checkout HEAD~X
IEで1つのコミットに戻る:
git checkout HEAD~1
あなたがプロジェクトに取り組み、1日ほど仕事をしたとしましょう。1つの機能でまだエラーが発生していることに気付きました。ただし、エラーの原因となった変更はわかりません。したがって、以前の作業コミットを釣り上げる必要があります。特定のコミットに戻すには:
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .
さて、コミットが機能するように。エラーはもうありません。問題を特定しました。これで最新のコミットに戻ることができます:
git checkout 792d9294f652d753514dc2033a04d742decb82a5 .
エラーが発生する前に特定のファイルをチェックアウトします(私の場合、Gemfile.lockの例を使用します)。
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock
そして、これは、後で発生するエラーに気付くことなく、コミットで作成したエラーを処理する1つの方法です。
何が変わったのかはわかりませんが、オプションがないと特定のコミットをチェックアウトできません --detach
。私のために働いた完全なコマンドは:
git checkout --detach [commit hash]
デタッチされた状態から戻るには、ローカルブランチをチェックアウトする必要がありました。 git checkout master
master
することで、デタッチしたままの問題を解決しますが、実行中git reset --hard
または機能git checkout -- .
しましたが、デタッチのままでした