Git正在复制代码

Jam*_*ker 0 git merge commit duplication cherry-pick

我们刚刚从Subversion切换到Git.

今天早上出现的问题是我们挑选了一个从一个分支到主人的提交,所以maser会有bug修复.然后我们将master合并回分支.

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

樱桃挑选的提交包括添加几行代码,最后在代码中两次.幸运的是,它们是完整的函数,所以它抛出了编译器错误.

从未提出过冲突.

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

谢谢.

Bri*_*new 5

从Git的角度来看,樱桃选择是一个不同的提交.即,当您合并回来时,您将在最初应用的基础上合并新的提交.

也就是说,您使用哈希创建提交ABC.你挑选它,创建一个新的提交DEF.合并当时适用DEF旁边ABC.

在上面,我可能希望你只是简单地在master上执行提交(比如说),然后在你的分支上挑选它.

这篇博文有更多信息.

请注意,它在主分支上创建了一个新提交.如果在master上运行"git log",则会看到同一提交消息的不同哈希值.为什么?

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

很明显,由于master分支没有来自功能分支的所有提交,因此在应用bug修复时它的完整快照将生成与错误修复时功能分支的完整快照不同的哈希.在那里申请.因此,不同的哈希.

但是当你将功能分支合并到master中时,这并不重要; 您创建错误修复的单个文件的哈希值是相同的,因为它们的内容将是相同的,因此在主文件上没有任何内容可以更新该文件.

此博客文章详细介绍了类似的情况以及如何使用git rebase以避免此类问题.