抱歉,如果这已经被问到了。我花了很长时间浏览 Git 上的旧 SO 帖子,但还没有找到真正符合这种情况的帖子。
我在一个由 5 名开发人员组成的团队中,在一个项目中使用 Git。我们已经使用它大约一年了,没有任何实际问题。我们在共享服务器上设置了 Gitosis,并在主分支中完成大部分工作,尽管我们经常拆分为侧分支以获取新功能等。
本周我在我们的 master 分支上看到了一些我不理解的奇怪行为——这种行为实际上会丢失提交并导致开发人员重新修复并重新进行已经进行的更改。我第一次看到它时,我把它归结为人为错误,并假设我没有像我想的那样推送到主分支。我第二次看到这个问题时,我们能够收集到更多信息,似乎系统很混乱,或者我们的一位开发人员错误地告诉 git 做一些他们不理解的事情。
这是我们看到的:如果我查看 git log,我可以看到所有的提交。它们是有序的,提交差异都是正确的。但是,如果我查看文件的当前版本,它不包含最近提交的所有更改。IE,日志显示提交,但文件中没有这些提交。当我查看 Web 界面上的文件历史记录时(我相信我们正在使用 GitWeb),很明显 GitWeb 知道最新的文件与最新的文件不同。也就是说,在最近的提交旁边,它会添加一个链接,上面写着“diff to current”。两个或三个提交后没有“与当前的差异”链接,因此很明显文件的当前版本是日志/最近提交后面的几个提交。
1)如何/什么会导致这种情况?如果我们自己使用错误的命令执行此操作,我们很想知道将来如何避免它。
2)如何修复?我的猜测是,如果可以明确地获取最近的提交,但谁能说这样做我们并没有以类似的方式丢失其他文件中的工作。整个事情相当令人不安,因为我们真的不确定此时丢失了什么。
非常感谢您的任何建议。