8

コミットを行い、いくつかの変更をプルしてマージし、2 回目のコミットを行いました。最初のコミットに戻りたいとき、コマンドを実行しました

git reset --hard <sha hash>

応答は「HEAD is now at <sha hash>」でしたが、コードはコマンドを実行する前と同じように見えます。通常は以前と同じように変更されますが、何かが正しく機能していないようです。ヘッドをリセットする前に、別のコマンドを実行してマージを解除する必要がありますか?


追加情報

実行git statusすると、次のように表示されます。

app/assets/images/.DS_Store.orig は追跡されていません

追加できます。

によるとgit reflog、ハッシュ1をコミットする前にプルしました(「マージ前」と見なします)。プル用の sha hash2 があります (表示されgit logませんでした)。hash1 と hash2 を掘り下げると、行った変更が表示され、そこから元のコードを再構築できました。それでも、これは非常に奇妙に思えます。それらのいずれかにしようとするgit resetと、マージ前からコードを取得できません。

4

4 に答える 4

1

git reset --hard <sha-hash>

次の場合は機能しません:

  • 追跡されていないファイルをリセットしようとしている (それらは git リポジトリの一部ではありません)。
  • .gitattributes一部の属性は、git 正規化ファイル ( )によってオーバーライドされます。
  • 間違ったハッシュを使用しているか、ハッシュが変更後のものです。

おそらく解決策は、次の方法でリモートブランチにあるものに戻ることです。

git reset origin/master --hard

その上にrebaseハッシュするかgit cherry-pick、本当に必要なコミットを行います。

上記で解決しない場合は、次のことも行う必要があります。

  • git branch -aデタッチされたブランチではなく、正しいブランチ ( ) でテストするようにしてください。
  • git reflog履歴の詳細を確認してください。
  • 実行git blame some/fileすると、コード行が変更されたリビジョンが表示されます。これは、コードが予期しないように見えるコミットの問題を追跡するのに役立ちます。
  • 以前に行われた特定のコミットが気に入らない場合は、それを行うことができrevertます。
于 2016-07-29T15:56:10.743 に答える
0

gitk (ブランチ ビューアー) でリセットできるため、リセットにコマンド ラインは使用しません。時々リセットが効かない。次に、すべてのディレクトリを削除し、.git フォルダーのみを残します。一部の作業ファイルを削除できないことがよくあります。これが git がリセットできない問題です。ファイルを保持するには、プログラムを閉じる必要があります。

于 2013-08-23T06:37:13.217 に答える
0

「git reset --hard」に入れた sha1 値は HEAD だと確信しています。HEAD を最初のコミットにリセットする場合は、次のようなコマンドを実行する必要があります。

git reset --hard <first commit's sha1 value>

また:

git reset --hard <HEAD~1>  

このサイトは、「git reset」がどのように機能するかを知るのに役立つかもしれません: git-reset

于 2013-08-23T05:48:09.897 に答える