Git正在复制代码

时间:2013-01-09 14:54:32

标签: git merge commit duplication cherry-pick

我们刚刚从Subversion切换到Git。

今天早上出现的问题是我们从一个分支机构中选择了一个提交到主人的提交,因此maser会修复bug。然后我们将master合并回分支。

当我们尝试编译时,所选择的提交中的所有添加都在代码中两次。

樱桃挑选的提交包括添加几行代码,最后在代码中两次。幸运的是,它们是整个函数,因此它引发了编译器错误。

从未发生过冲突。

我们如何避免这种情况。这是一个主要问题。

感谢。

1 个答案:

答案 0 :(得分:5)

从Git的观点来看,一个挑选是一个不同的提交。即,当您合并回来时,您将在最初应用的之上合并新提交。

也就是说,您使用哈希ABC创建提交。你挑选它,创建一个新的提交DEF。然后,合并将DEFABC一起应用。

在上面,我或许希望你只是简单地在master上执行提交(比如说)并将其选择到你的分支机构。

This blog post有更多信息。

  

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

     

这是因为Git如何模拟提交的内容。提交是一个   整个存储库的完整快照,以及给定的哈希值   commit反映了整个目录中每个文件的状态 - 它是   他们所有哈希的哈希。

     

很明显,因为master分支没有提交所有提交   功能分支,它是错误修复时的完整快照   应用将生成与完整快照不同的哈希   应用错误修复时的功能分支。从而,   不同的哈希。

     

但是当你将功能分支合并到master时,那不会   物;您创建错误修复的单个文件的哈希值   将是相同的,因为他们的内容将是相同的,所以有   没有什么可以在master上更新该文件。

This blog post详细说明了类似情况以及如何使用git rebase来避免此类问题。