[解決済み】cherry-pick後のgit mergeはどのように機能するのでしょうか?
2022-04-21 23:57:24
質問
があるとします。
master
という分岐があります。
次に
newbranch
git checkout -b newbranch
に新たに2回コミットし
newbranch
:
コミット1
と
コミット2
そして、masterに切り替えて、make
cherry-pick
git checkout master
git cherry-pick hash_of_commit1
を見ると
gitk
を見ると
コミット1
とそのチェリーピック版のハッシュは異なるので、厳密にはこれらはふたつの異なるコミットです。
最後に
newbranch
を
master
:
git merge newbranch
で、ハッシュが異なるこれら二つのコミットは問題なくマージされたことがわかります。しかし、同じ変更を二度適用することを意味しているので、どちらかが失敗するはずです。
gitは本当にマージ中にコミットの内容を賢く分析して、変更を二度適用すべきではないと判断しているのでしょうか、それともこれらのコミットは内部的にリンクされているとマークされているのでしょうか?
解決方法は?
簡単な答え
心配しないでください、Gitが処理します。
長い回答
SVNなどとは異なり 1 の場合、Git はコミットをデルタ形式で保存しません。 スナップショットベース 2,3 . SVNでは、マージされた各コミットをパッチとして適用しようと素朴に試みますが(そして、あなたが言った通りの理由で失敗します)、Gitは一般にこのシナリオを処理することができます。
マージするとき、Gitは両方のHEADコミットのスナップショットを新しいスナップショットに結合しようとします。もしコードの一部やファイルが両方のスナップショットで同じであれば(つまり、あるコミットがすでにチェリーピックされていたため)、Gitはそれに手をつけません。
情報源
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] git rebase の取り消し
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】Gitでコミットをチェリーピックするというのはどういう意味ですか?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】gitがローカルバージョンをリモートバージョンに置き換える
-
[解決済み] git pull リモートブランチがリモートの参照先を見つけることができない
-
[解決済み】マージ後のコミットでGitエラー - fatal: マージ中に部分コミットができない
-
[解決済み】git-mergeの-dry-runオプションはありますか?
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
[解決済み] [Solved] originにプッシュしようとすると、Gitが「No such remote 'origin'」と言うのはなぜですか?
-
[解決済み] 複数のgitコミットを元に戻すには?
-
[解決済み] git が「Pull is not possible because you have unmerged files」と表示するのはなぜですか?
-
[解決済み] SourceTree error:1407742E:SSLルーチン:SSL23_GET_SERVER_HELLO:tlsv1警告プロトコルバージョン
-
[解決済み] GitHubです。パーミッションが拒否されました (公開鍵)。