web-dev-qa-db-ja.com

Gitロールバック1プル

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

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

35
Bastian

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

85
Karl Bielefeldt

この場合、ブランチを使用することは理にかなっています。ブランチは、失敗または成功時に簡単に削除またはマージできます。これにより、新しい内容を追跡しやすくなり、「最後のコミットを削除する」よりも複雑な場合(特にスクリプトを使用する場合)に、よりきれいになります。サーバー上で:

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

しかし、とにかく...最後のコミットを削除することが唯一のポイントなので、git reset Joshが指摘したとおり。

4
François

git reset HEAD^は、前のコミットに移動するはずです。詳細については here を参照してください。

4
Josh Farneman

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

git reset --keep HEAD@{1}
2
Riajul Islam

@Karl Bielefeldtによって受け入れられた答えは、私にとってはうまくいきませんでした。 GITバージョン2.10.0.windows.1を使用しています。これは古いバージョンでも機能する可能性があります。 「不明なスイッチ 'e'」エラーが表示されます。最後に、私はいくつかの変更を行い、それが機能しました。

以下は、以前のプル前の状態に戻す手順です。

  1. 使用する git reflogは、Karlが言及したリストを表示します。
  2. リストから元に戻すコミットバージョンを選択します。
  3. 実行git reset --hard <commit version>
2
Jogger

これを行う別の方法には、タグの使用が含まれます。 HEADをプルする前に何らかのバージョン番号でタグ付けすることができると考えて、プルしてください。その後、HEAD行う git reset {tag name}そのようにしてプルに複数のコミットがある場合、マージ前の場所にスキップできます。

0
Greg Demetrick