1. ホーム
  2. git

[解決済み] Git で特定のコミットをマージする方法

2022-03-15 12:34:01

質問

GitHubのあるリポジトリからブランチをフォークして、自分専用のものをコミットしています。今、私は元のリポジトリが良い機能を持っていることを発見しました。 HEAD .

前のコミットを削除してマージしたいのですが。どうしたらいいでしょうか?すべてのコミットをマージする方法は知っています。

git branch -b a-good-feature
git pull repository master
git checkout master
git merge a-good-feature
git commit -a
git push

解決方法は?

' git cherry-pick が答えになるはずです。

既存のコミットで導入された変更を適用します。

を忘れずにお読みください。 ブドンラン の回答は、この記事の中でチェリーピックの結果について述べています。
"あるブランチからすべてのコミットを引き出し、指定したコミットを別のブランチにプッシュする"。 を、ここで。

A-----B------C
 \
  \
   D

になります。

A-----B------C
 \
  \
   D-----C'

このコミットの問題は、git がコミットにはそれ以前のすべての履歴が含まれると考えていることです。

C'が異なる SHA-1 IDです。
同様に、あるブランチから別のブランチへのコミットをチェリーピックすると、基本的にパッチを生成してそれを適用することになるので、そのように歴史も失います。

このコミットIDの変更は、gitのマージ機能などを破壊します(ただし、控えめに使用すれば、これを回避するヒューリスティック機能もあります)。
もっと重要なことですが。 機能的な依存関係を無視する - CがBで定義された関数を実際に使用した場合、あなたは決して知ることができない .