2013-02-03 10 views
26

私は元のSHAコミットコードを保持しながらフェッチされたリモートでコミットを選択したい(私の現在のブランチは以前の状態にリセットされたこのリモートに基づいている) 。チェリー - コミットを選択して元のSHAコードを保持

+10

私はあなたがコミットハッシュが本当に何かを誤解していると思います。 –

+2

なぜ元のSHAハッシュを保持したいのですか? – siegi

答えて

37

gitのSHAハッシュは、情報の異なる部分から計算される:

  1. それが参照ツリーと、基本的には、コミットが現れるブランチ内のリポジトリの現在の内容。
  2. のSHA親コミット
  3. コミットメッセージ
  4. 著者情報:名前、電子メール、タイムスタンプ。
  5. コミッター情報:名前、電子メール、タイムスタンプ。

チェリーピックされたコミットを編集してツリー、コミットメッセージ、作成者とコミッター情報がまったく同じになっても、親コミットのSHA(またはマージコミットを処理する場合はコミット)常に異なるでしょう。したがって、チェリーピックの後に同じSHAハッシュを生成することはできません(SHAの衝突が見つからない限り)。

+0

有用な情報をありがとう:)実際に私は 'git branch master remote/master'コマンドでブランチを作成しましたそれは元のSHAを保持していた...私は特定のコミットにリセットし、今私は別の、最近のものにリセットしたいが、リポジトリログの別のポイントに行く... – blameless75

+0

実際に私はcpしようとするときコミット私はそれに関連するすべてのファイルに "私たちによって削除された"エラーがあります...それは奇妙です... – blameless75

+0

編集:私の前のコメントを無視し、私はリモートのものを混ぜ... – blameless75

12

SHAコミットハッシュは、リポジトリの状態から、コミットの時点までの履歴全体を使用して作成されます(ブランチは含まれません)。つまり、履歴全体が同じでない限り、元のハッシュをチェリーピッキングに保つことはできません。チェリーピッキングは意味をなさないでしょう。

+0

実際にはリポジトリログの次のコミットです。私はローカルブランチをコミットのSHAにリセットしようとしましたが、私のブランチはまったく別の場所にあります... – blameless75

+0

もっと正確に言えば、SHAハッシュはリポジトリ全体の_状態を表しますが、_コミットとその全体の履歴_を表します。リポジトリには異なるブランチとコミットがあるかもしれません... – siegi

+0

@siegiありがとうございました。 "その時点でのリポジトリ全体の状態"は私が気にしていたものでしたが、枝も除外されました – eis

3

他の回答へのあなたのコメントによると、私は単にリモートコミットにリセットしたいと思うと思います。 git reset --hard <SHA>を使用してこれを行うことができます。これにより、作業ディレクトリ内の(コミットされていない)すべての変更が破棄され、このブランチで行ったすべてのコミットにはアクセスできなくなります。

これがあなたの望むものではない(またはわからない)場合は、あなたがしたこと、やりたいこと、達成しようとしていることをより明確に記述してください。

関連する問題