如果已经被问过,请道歉。我花了很长时间浏览Git上的旧SO帖子,但还没有发现一个与这个案例非常匹配的帖子。
我是一个由5名开发人员组成的团队,他们在项目中使用Git。我们一直在使用它而没有任何实际问题。我们在共享服务器上设置了Gitosis,并在master分支中完成了大部分工作,尽管我们经常将它们分成侧分支以用于新功能等。
本周我看到了一些我不了解的主分支的奇怪行为 - 行为有效地失去了提交并导致开发人员重新修复并重新做了已经做过的更改。我第一次看到它时,我把它归结为人为错误,并假设我没有按照我的想法推到主分支。我第二次看到这个问题时,我们能够收集更多的信息,看起来系统很混乱,或者我们的一个开发人员错误地告诉git做了一些他们不理解的事情。
以下是我们看到的内容: 如果我查看一个git日志,我可以看到所有提交。它们是有序的,并且提交差异都是正确的。但是,如果我查看该文件的当前版本,它不包含最近提交的所有更改。 IE,日志显示提交,但文件中没有这些提交。当我查看Web界面上的文件历史记录(我相信我们正在使用GitWeb)时,GitWeb确实知道最新文件与最新文件不同。也就是说,在最近的提交旁边,它会添加一个“diff to current”的链接。两次或三次提交没有“diff to current”链接,因此很明显该文件的当前版本是日志/最近提交后面的一些提交。
1)如何/会导致什么?如果我们自己用错误的命令做到这一点,我们很想知道将来如何避免它。
2)如何修复?我的猜测是,如果可以明确地抓住最近的提交但是谁说这样做我们没有以类似的方式丢失其他文件中的工作。整件事情让人感到非常不安,因为我们真的不确定此时已经失去了什么。
非常感谢任何建议。
答案 0 :(得分:1)
就在我的脑海中,您推动的存储库是否有工作空间?也就是说,如果你去repo所在的目录,你真的看到你修改过的文件吗?如果是这样,那可能是一个不好的迹象。你应该只推送到裸存储库。如果有人确实推送到非裸存储库,您可以通过在那里执行git reset --hard
将工作区重置为当前头。