59

Git リポジトリであるプロジェクトを提供する Web サーバーがあります。コードに変更を加えるときは、サーバーから git pull を実行します。ときどき新しいコードがクラッシュすることがあります。最新のプル、つまり直前のプルにロールバックできるようにしたいと考えています。最新のshaを検索することなく、スクリプトでそれを行いたいです。どうやってやるの?

編集: 明確にするために、「おっと! この最新のプルは間違いでした。それをしなければよかった」というボタンを押すなど、1 つのアクションを実行する必要があるだけです。この状況では、sha やタグなどを探す必要はありません。これは、「元に戻す」機能のようなものです。次に、コードの作業を続行できるようにしたいので、サーバーでの次のプルで最新の変更を取り込む必要があります。

4

9 に答える 9

154

git reset --hard HEAD^1プルしたものから 1 つのコミットを戻します。引っ張る前の状態に戻したい場合は、 を使用しますgit reset --hard HEAD@{1}。ローカル リポジトリでヘッドを変更した最後の操作の@{1}前にヘッドがあった場所を追跡するため、プルを実行する前にいくつかのコミットがプッシュされた場合は、いくつかのコミットに戻ります。git reflogリスト全体を表示するには、 も参照してください。

于 2012-04-17T19:31:06.100 に答える
14

最後のプルを破棄する別の方法があります

git reset --keep HEAD@{1}
于 2018-10-25T04:53:12.913 に答える
5

git reset HEAD^前のコミットに移動する必要があります。詳細については、こちらを参照してください。

于 2012-04-17T18:15:45.670 に答える
5

この場合、失敗または成功時に簡単に削除またはマージできるブランチを使用するのが理にかなっています。これは、何が新しいかを追跡するのに役立ち、「最後のコミットを削除するだけ」よりも複雑なケースがある場合 (特にスクリプトでそれを実行したい場合) に、物事を整理するのに役立ちます。サーバー上で:

git fetch --all           # fetch new commits from remote
git checkout -b testing   # create and switch to branch 'testing'
git merge origin/master   # merge new commits from remote branch master
                          # (in branch 'testing')

...次にテストを行います...成功した場合:

git checkout master       # switch back to master
git merge testing

そして失敗した場合:

git checkout master
git branch -D testing     # remove testing branch

とにかく...あなたの唯一のポイントは最後のコミットを削除することです.Joshがgit reset指摘したように使用できます.

于 2012-04-17T19:19:32.660 に答える
4

@Karl Bielefeldt によって受け入れられた回答は、私にとってはうまくいきませんでした。私は GIT バージョン 2.10.0.windows.1 を使用しています。これは古いバージョンでも機能する可能性があります。「unknown switch 'e'」エラーが発生します。最後に、いくつかの変更を加えたところ、うまくいきました。

前回プルする前の状態に戻す手順は次のとおりです。

  1. git reflogカールが言及したように、リストを表示するために使用します。
  2. リストから戻したいコミット バージョンを選択します。
  3. 実行するgit reset --hard <commit version>
于 2016-12-13T13:19:02.040 に答える
0

これを行う別の方法には、タグの使用が含まれます。プルの前に何らかのバージョン番号でHEADにタグを付けることができると考えて、プルを実行してから、HEADをロールバックする必要があるgit reset {tag name}場合は、プルに複数のコミットがある場合、前の場所にスキップして戻ることができます合流へ。

于 2012-04-17T18:19:23.720 に答える