web-dev-qa-db-ja.com

git merge --no-commit vs git cherry-pick --no-commit

git merge --no-commitgit cherry-pick --no-commitに違いはありますか?

そして、これら2つのコマンドの後にコミットすると、履歴に違いがありますか?

33
whenov

git merge --no-commitの後にコミットすると、実際にはマージコミットが行われます。一方、git cherry-pick --no-commitの後は、単一の親でコミットを取得します。

したがって、はい、これらの2つのコマンドには違いがあります。

特に次のようなものがある場合

A -- B -- C
 \        L HEAD
  \
   -- D -- E

cherry-pick commit Eを実行すると、commit Dの変更を取得できません。一方、mergeの場合、両方を取得できます。

49
gturri

git-merge は2つ以上の開発履歴を結合するために使用されますが、 git-cherry-pick は既存のコミットによって導入された変更を適用するために使用されます。

そのため、 git-merge を実行した後にコミットすると、Gitは merge commit と呼ばれるものを追加します。一方、 cherry-pick(ing) commitsの場合、gitはこれらのコミットによって導入された変更を作業ツリーの最上部に適用します(2つ以上のブランチ間に融合はありません)。別の言い方をすれば、コミットはクローン化され、ブランチの上に置かれます。

Git Cherry-pick vs Merge Workflow を見て、リポジトリ管理者の実際のニーズに基づいた違いを理解してください。

9
Ahmed Siouani