Git正在复制代码

Git正在复制代码,git,merge,commit,duplication,cherry-pick,Git,Merge,Commit,Duplication,Cherry Pick,我们刚刚从Subversion切换到Git 今天早上出现的问题是,我们从一个分支中选择了一个提交到master,这样maser就可以修复bug了。然后我们将master合并回分支 当我们尝试编译时,来自cherry-picked-commit的所有添加都在代码中出现了两次 cherry-picked提交包括添加几行代码,这些代码后来在代码中出现了两次。幸运的是,它们是完整的函数,所以它抛出了一个编译器错误 从来没有发生过冲突 我们如何避免这种情况。这是个大问题 谢谢。从Git的角度来看,樱桃选择

我们刚刚从Subversion切换到Git

今天早上出现的问题是,我们从一个分支中选择了一个提交到master,这样maser就可以修复bug了。然后我们将master合并回分支

当我们尝试编译时,来自cherry-picked-commit的所有添加都在代码中出现了两次

cherry-picked提交包括添加几行代码,这些代码后来在代码中出现了两次。幸运的是,它们是完整的函数,所以它抛出了一个编译器错误

从来没有发生过冲突

我们如何避免这种情况。这是个大问题


谢谢。

从Git的角度来看,樱桃选择是一种不同的承诺。i、 e.当您重新合并时,您正在重新合并最初应用的提交之上的新提交

也就是说,使用hash
ABC
创建提交。您可以选择它,创建一个新的提交
DEF
。然后,合并回应用
DEF
ABC

在上面的例子中,我可能希望您只需在master上执行commit(比如)并对您的分支进行cherry-pick

有更多信息

请注意,它在主分支上创建了一个新的提交。如果 大师,你运行“git log”,你会看到一个不同的哈希值 提交消息。为什么?

这是因为Git如何对提交进行建模。承诺就是承诺 整个存储库的完整快照,以及给定存储库的哈希 commit反映整个目录中每个文件的状态—它是 他们所有杂凑的杂凑

所以很明显,因为主分支没有来自的所有提交 功能分支,它在修复错误时的完整快照 将生成与的完整快照不同的哈希 应用错误修复时的功能分支。因此 不同的散列

但是,当您将特性分支合并到主功能中时,就不会发生这种情况 物质;进行错误修复的单个文件的哈希 都是一样的,因为它们的内容都是一样的,所以有 对于该文件,在master上没有任何可更新的内容


详细介绍了类似的情况以及如何使用git rebase来避免此类问题。

从git的角度来看,cherry pick是一种不同的提交。i、 e.当您重新合并时,您正在重新合并最初应用的提交之上的新提交

也就是说,使用hash
ABC
创建提交。您可以选择它,创建一个新的提交
DEF
。然后,合并回应用
DEF
ABC

在上面的例子中,我可能希望您只需在master上执行commit(比如)并对您的分支进行cherry-pick

有更多信息

请注意,它在主分支上创建了一个新的提交。如果 大师,你运行“git log”,你会看到一个不同的哈希值 提交消息。为什么?

这是因为Git如何对提交进行建模。承诺就是承诺 整个存储库的完整快照,以及给定存储库的哈希 commit反映整个目录中每个文件的状态—它是 他们所有杂凑的杂凑

所以很明显,因为主分支没有来自的所有提交 功能分支,它在修复错误时的完整快照 将生成与的完整快照不同的哈希 应用错误修复时的功能分支。因此 不同的散列

但是,当您将特性分支合并到主功能中时,就不会发生这种情况 物质;进行错误修复的单个文件的哈希 都是一样的,因为它们的内容都是一样的,所以有 对于该文件,在master上没有任何可更新的内容


详细说明类似情况以及如何使用
git-rebase
避免此类问题。

您应该尝试类似于
git-flow
工作流的方法。(说明:工具:)在这种情况下,“正确”的方法应该是在旧代码中为bug创建一个新的分支(而不是在功能分支上开发的分支)并将其合并到master和feature分支中,这样git就可以正确地跟踪提交了。@millimoose认为nvie工作流显然不适用于所有情况。开发分支机构似乎对连续交付不太友好。不幸的是,有时樱桃采摘是唯一的答案。很多时候,我们会发现一个影响所有分支的bug,我们需要在所有分支中进行修复,但我们不希望来自任何分支的其他更改。这就是为什么樱桃采摘首先存在的原因。@ArtB我承认我对这个模型的实践有限,它似乎适合OP的情况。你所说的“连续交货不友好”是什么意思?想必您仍然希望新功能经过某种集成过程,如果我理解解释的话,开发主要是这样做的,而功能分支对组来说是“私有的”。或者换句话说,您不需要QA“私有”代码。(虽然很明显,对于没有专门QA的小型应用程序来说,整个模型的杀伤力太大了。)@JamesBaker如果bug影响到所有分支,那么你可以根据它们的共享祖先来确定bug修复分支,然后将此分支合并到所有分支中。你应该尝试类似于
git flow
工作流的方法。(说明:工具:)在这种情况下,“正确”的方法应该是在旧代码中为bug创建一个新的分支(而不是在功能分支上开发的分支)并将其合并到master和feature分支中,这样git就可以正确地跟踪提交了。@millimoose认为nvie工作流显然不适用于所有情况。开发分支机构似乎对连续交付不太友好。不幸的是,有时樱桃采摘是唯一的答案。许多t