所以我正在处理一个文件并将其提交给我的跟踪分支并推送到远程分支。其他人必须对同一个文件进行了更改,并与我的更改发生冲突,他们解决了问题,但删除了我的修改作为解决方案。他们下次去应用程序时出现错误,并意识到这是我正在处理的事情。
我试图查看该文件的历史记录,但似乎我的提交已从历史记录中删除。在项目上工作的人没有做任何高级git技术,它几乎是fetch merge,commit push。
我只是不明白为什么提交已经从我的历史中消失了。它不应该存在,或者当存在合并冲突并且有人解析并最终执行合并提交时会删除历史记录吗?
我们在bitbucket上托管我们的仓库,我可以去那里找到我提交的代码,我需要更新文件,但这似乎不太理想。
我们都是git的新手,并且第一次在我们的一个项目中使用它,所以我们对这一切非常顽固。
答案 0 :(得分:3)
Git的内部结构是DAG的结构,而分支只是提交的可变指针(标记是不可变指针)。 Git的日志只显示通过回溯这些分支/提交指针可以访问的提交。不知何故,分支指针发生了变化,因此通过回溯无法访问您的提交。为了引起这种情况,发生了一些破坏性事件,就像一个反叛。
由于您找到了提交,因此可以通过执行以下操作查看它在树中的位置:
git checkout -b temp_branch
git reset --hard <lost-commit-sha1>
gitk --all
temp_branch现在指向您的提交,您可以通过查看DAG查看发生的情况。
答案 1 :(得分:1)
回答你的问题:有人改写了分支历史。没有其他方法可以失去推送提交。
避免这种情况的解决方案:限制非快速推送给大多数开发人员和培训。