web-dev-qa-db-ja.com

コミットをチェリーピックして元の状態を保持SHAコード

元のSHAコミットコード(現在のブランチは、以前の状態にリセットしたこのリモートに基づいています)を保持しながら、フェッチしたリモートでコミットをチェリーピックします。

43
blameless75

Git SHAハッシュは、さまざまな情報から計算されます。

  1. tree参照する;基本的に、コミットが表示されるブランチのリポジトリの現在のコンテンツ。
  2. SHAの親コミット)
  3. メッセージのコミット
  4. 著者情報:名前、電子メール、およびタイムスタンプ。
  5. コミッター情報:名前、電子メール、およびタイムスタンプ。

チェリーピックのコミットを編集して、ツリー、コミットメッセージ、作成者、およびコミッターの情報がまったく同じになる場合でも、親コミットのSHAマージコミット)は常に異なるため、チェリーピックの後に同じSHAハッシュを生成することはできません(SHA衝突;))。

61
Marco Leogrande

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

14
eis

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

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

3
siegi