gpt4 book ai didi

git - git merge --squash 和 git cherry-pick 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 13:51:32 26 4
gpt4 key购买 nike

如果我在标准的主功能工作流程中工作,将功能分支压缩到主功能分支和将其挑选到主功能分支之间有什么区别?

示例分支:

m1 -- m2                 master
\-- f1 -- f2 feature

我认为两者的输出相同

m1 -- m2 -- -- -- m3     master
\-- f1 -- f2 feature

最佳答案

merge --squashcherry-pick 之间有两个重要区别:

1。 Cherry-picking 只移动一次提交

也就是说,如果您遇到上述情况并且您(在 master 上)执行 git cherry-pick 功能,结果分支将如下所示:

m1 -- m2 -- f2’           master
\-- f1 -- f2 feature

这意味着来自 f1 的更改不会出现在 master 上(如果 f2 依赖于它们,那么 cherry-picking 可能会失败。

2。 cherry-pick 创建提交

merge --squash 不会立即提交,而是创建所有更改的摘要并使它们准备好提交。这本质上是完整分支更改的补丁,与 git diff m1..feature 将显示的相同。

在我的机器上,快速测试给出了这个输出:

$ test git:(master) git merge --squash testbranch
Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested

这里重要的一点是“不更新 HEAD”,git-speak 表示“我没有提交我所做的事情”。事实上,第二句话更加用户友好......

如果您想逐步开发(通过提交导致解决方案的所有小步骤,例如在每次成功的测试运行后提交),此功能很方便。在这种情况下,您的历史可能会变得困惑有数百个单行提交。所以最好时不时地进行一次 merge 压缩提交(例如,在你开发了一点功能之后)。

关于git - git merge --squash 和 git cherry-pick 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28189707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com