1255

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

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

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

さて、私は何をすべきですか?していいgit reset --hard ですか?二度と台無しにしたくないので、詳細な手順を尋ねますか?

4

15 に答える 15

1813

実行git pullすると、次のタスクが順番に実行されます。

  1. git fetch
  2. git merge

マージ ステップは、設定でマージされるようにセットアップされたブランチを結合します。マージステップを元に戻したいが、おそらくフェッチは元に戻したい(あまり意味がなく、必要ないはずです)。

マージを元に戻すには、 を使用git reset --hardしてローカル リポジトリを以前の状態にリセットします。git-reflogを使用して以前の状態の SHA-1 を見つけてから、それにリセットします。

警告

このセクションにリストされているコマンドは、コミットされていないすべての変更を削除するため、作業が失われる可能性があります。

git reset --hard

または、次のような特定の時点にリセットします。

git reset --hard master@{"10 minutes ago"}
于 2009-08-03T16:47:27.030 に答える
447

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

git reset --hard a0d3fe6

a0d3fe6 は次のようにして見つかります

git reflog

元に戻したいポイントを見ます。

于 2014-07-22T00:39:44.657 に答える
78

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

以前の状態の SHA を見つけて作成します (HEAD@{1} は例です)

git reset --hard HEAD@{1}
于 2016-03-08T17:00:48.757 に答える
48

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

git reset --hard $COMMIT

.

ボーナス:

プルといえば、面白いトリックをシェアしたいと思います。

git pull --rebase

この上記のコマンドは、多くの時間を節約した私の git ライフの中で最も便利なコマンドです。

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

詳細については、http : //gitolite.com/git-pull--rebaseをご覧ください。

于 2015-12-23T15:55:03.457 に答える
43

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

于 2009-08-03T16:49:24.513 に答える
19

できるよgit reset --hard ORIG_HEAD

「プル」または「マージ」は、これらのアクションを実行する前に ORIG_HEAD を現在の状態に設定するためです。

于 2015-08-19T16:52:11.010 に答える
7

最後のマージを に戻すcustom-branch最も簡単な方法は次のとおりです。

git reset --hard custom-branch@{1}

mainブランチの例:

git reset --hard main@{1}
于 2021-09-20T11:04:22.560 に答える
3

コマンドcurrent branchを実行した場所のログを参照してくださいgit pull

git log

サンプル出力は次のようになります

commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxa3dd0
Author: user <user@gmail.com>
Date:   Tue Nov 23 20:19:58 2021 +0530

    latest changes

commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxd697b
Author: user <user@gmail.com>
Date:   Tue Nov 23 17:45:44 2021 +0530

    latest changes includes account details api

commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxc0e6fa
Author: user <user@gmail.com>
Date:   Tue Nov 23 17:02:39 2021 +0530

    latest changes

必要な最後のコミット ID をコピーします。たとえば、最後のコミット ID がxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc0e6fa(このコミット ID が git pull を実行する前の最後のコミット ID であると仮定して) であり、このコミット ID より上の 2 つのコミットが git pull コマンドの後に来た場合、このコミット ID を使用して以前の変更を取得します。

git reset --hard xxxxxxxxxxxxxxxxxxxxxxxxxxxxxc0e6fa

これを行うと、このコミット ID より上のコミットが削除されます。この後、以前の変更を取得するのと同じくらい簡単です。

于 2021-11-26T14:15:57.000 に答える