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