web-dev-qa-db-ja.com

Git pullを元に戻す、リポジトリを古い状態にする方法

私のソース/リポジトリがgit pullする前の古い状態になるようにgit pullを元に戻す、または元に戻す方法はありますか?そうしたくないファイルをいくつかマージしたが、他の残りのファイルだけをマージしたので、これを行いたい。それで、私はそれらのファイルを取り戻したいです、それは可能ですか?ありがとう:)

明確にするためにgit mergeを元に戻したい。いくつかの答えを見た後、私はこれをしました

git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...

さて、どうすればいいですか。 git reset --hardを実行しても大丈夫ですか?私はもう一度それをねじ込みたくないので、詳細な手順を尋ねますか?

833

git pullは2つのことをします:それはgit fetchを行い、それからgit mergeを行います。ここで、設定でマージされるように設定されたブランチをマージします。

ですから、あなたがしたいのはマージを元に戻すことです(フェッチを元に戻すことはあまり意味がないので必要ではないはずです)。

これを行うには、git reset --hardを使用して前の状態にリセットします。 git-reflog コマンドを使用して、前の状態のSHA-1を見つけてからリセットします。

警告 git reset --hardはコミットされていない変更をすべて削除します。

1167
jkp

Jkpの答えと同じですが、完全なコマンドは次のとおりです。

git reset --hard a0d3fe6

することによってa0d3fe6が見つけられるところ

git reflog

元に戻したいポイントを見てください。

268
Jeffrey Sun

マージを取り消すより現代的な方法は次のとおりです。

git merge --abort

そして少し古い方法:

git reset --merge

以前の回答で説明した古い方法(警告:ローカルの変更をすべて破棄します):

git reset --hard

ただし、実際には、git merge --abortが存在する場合、git reset --mergeMERGE_HEADとのみ同等であることに注意してください。これは、gitコマンドのmergeコマンドで読むことができます。

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

マージに失敗した後、MERGE_HEADがない場合、失敗したマージはgit reset --mergeで元に戻すことができますが、必ずしもgit merge --abortではなく、同じものに対する古い構文と新しい構文のみ。これが、私がgit reset --mergeが日常業務ではるかに有用であると思う理由です。

105
Martin G

それは最初の使用で動作します:git reflog

あなたの前の状態のSHAを見つけて、作ってください(HEAD @ {1}は一例です)

git reset --hard HEAD@{1}
48

Gitkを使っているなら( "gitコマンドラインから" gitk --all "を実行してみてください)、それは簡単です。それを実行し、ロールバックしたいコミットを選択(右クリック)して、「マスターブランチをここにリセット」を選択してください。コミットされていない変更がない場合は、 "hard"オプションを選択してください。

38
Samuel Carrijo

$COMMITを実行する前に、git pullが最後のコミットIDだったとします。最後のプルを元に戻すために必要なのは

git reset --hard $COMMIT

ボーナス:

プルについて言えば、私は興味深いトリックを共有したいと思います、

git pull --rebase

このコマンドは私のgitの人生で最も便利なコマンドで、多くの時間を節約しました。

新たにコミットをサーバーにプッシュする前に、このコマンドを試してください。そうすると、最新のサーバーの変更が自動的に同期され(フェッチ+マージ)、gitログの一番上にコミットが置かれます。手動のpull/mergeについて心配する必要はありません。

で詳細を見つける: http://gitolite.com/git-pull--rebase

27

git reset --hard ORIG_HEADできます

"pull"または "merge"なので、これらのアクションを実行する前にORIG_HEADを現在の状態に設定してください。

11
Orlando

これは、あなたがプルした変更を元に戻す最も簡単な方法です。

git reset --hard 9573e3e0

9573e3e0はあなたの{Commit id}です

6
Manish Goswami

git pullを元に戻したい最も一般的な理由であるマージに失敗した場合、git reset --mergeを実行すると、フェッチしたファイルを保持しますが、git pullマージしようとしました。そうすれば、git mergeが時々生成する混乱なしに、何をすべきかを決定できます。また、他のすべての回答で必要な--hardが必要とする正確なコミットIDを見つける必要はありません。

2
Davide