git merge --no-commit
とgit cherry-pick --no-commit
に違いはありますか?
そして、これら2つのコマンドの後にコミットすると、履歴に違いがありますか?
git merge --no-commit
の後にコミットすると、実際にはマージコミットが行われます。一方、git cherry-pick --no-commit
の後は、単一の親でコミットを取得します。
したがって、はい、これらの2つのコマンドには違いがあります。
特に次のようなものがある場合
A -- B -- C
\ L HEAD
\
-- D -- E
cherry-pick
commit E
を実行すると、commit D
の変更を取得できません。一方、merge
の場合、両方を取得できます。
git-merge は2つ以上の開発履歴を結合するために使用されますが、 git-cherry-pick は既存のコミットによって導入された変更を適用するために使用されます。
そのため、 git-merge を実行した後にコミットすると、Gitは merge commit と呼ばれるものを追加します。一方、 cherry-pick(ing) commitsの場合、gitはこれらのコミットによって導入された変更を作業ツリーの最上部に適用します(2つ以上のブランチ間に融合はありません)。別の言い方をすれば、コミットはクローン化され、ブランチの上に置かれます。
Git Cherry-pick vs Merge Workflow を見て、リポジトリ管理者の実際のニーズに基づいた違いを理解してください。