更新:这是我正在使用的SmartGit版本(3.0.11版)中的一个bug——一个类似于GitK的应用程序。“pushable commits”列表在执行“git pull”之后被修改,一些尚未被推送的本地提交意外地从此ui列表中删除。这导致了本文中描述的混乱,它似乎是唯一没有被推送的提交,即“合并提交”。
我将更改推送到远程(在github上)。另外两个开发人员在我之后推了一些提交。我完全没有本地更改或提交,并做了一个“git pull”。
在它拉下更改之后,它立即强制我执行合并提交(允许我键入可选消息)。我已经使用git两年了,我还没有遇到这样的情况:将更改拉入干净的本地repo将强制合并提交。这两次发生在过去的一周里,我不知道该怎么做,所以我立即推这个合并提交两次都没有问题(!?)。
在我们的团队中,我们混合了一些喜欢回扣的开发人员和其他使用git-pull的开发人员。我想知道是否与此相关(尽管我们已经设置了一年多,而且我在一周前还没有遇到过这种情况)。我用的是git-pull。
下图显示了历史。
我最初提交的是紫色线的底点。另外两个开发人员紧追着我,在拉取他们的更改后,在我的本地repo中创建了顶部的“合并分支”提交(在同一条紫色线上)。

最佳答案

在看了你的照片更久之后,我意识到一些显而易见的事情。让我们将提交从下到上命名为a到e,以使其更容易。
所以这里的问题是:在拉之前,您的本地分支指向A,这是您在本地进行的提交。
然而,当查看commit d时,您可以看到红线并没有以A结尾,而是在前面的某个地方(屏幕截图没有显示这一点)。因此,提交不是基于A的,因此,在拉动时不能快速前进。您必须创建一个合并提交。
现在你提到你以前推过,所以这有点奇怪。如果您真的推送了它并且A已经发布,那么您的推送将失败,您必须首先合并它。如果D还没有发布,您的推送就已经完成了,但是D的作者必须合并它才能推送它。
由于这两种情况都没有发生,而且稍后在拉取时必须创建合并,剩下的唯一原因是您实际上从未推送提交D
请注意,提交不会自动推送提交。正如我在评论中所说,除非你推/拉,否则你所做的一切都是局部的。只有当你推或者拉的时候,提交才会被转移到或者从远程转移。
(另一个选项是,推送A的开发人员确实遇到冲突,但选择强制推送,从远程存储库中删除提交。如果您使用的是github,则应该可以从该用户的活动日志中看到。)

09-04 17:11
查看更多