我有一个远程git repo,我在一个团队工作,一个成员 - 不熟悉git - 添加了很多手动更改和新文件。长话短说,一团糟。如何重新排列git以从零开始再次跟踪所有文件。 我应该再次创建并初始化一个新的.git文件,还是有一个扫描新文件和新更改的命令? 我的意思是手动更改,直接对文件进行更改,而不是通过推送提交。所以未经修改的变化。 我不关心历史,我只需要从现在开始跟踪我的所有文件。
答案 0 :(得分:2)
如果您想要创建一个没有历史记录的新分支,只需像git checkout --orphan new-master
那样进行孤儿结账。然后按照您喜欢的方式排列文件并创建提交。此提交没有历史记录,但本身就是root提交。然后,您还可以将master
分支指向此新提交并执行强制推送。
答案 1 :(得分:1)
更新 - 正如我所说,问题似乎并不明确;评论中的讨论表明问题与我理解的不同。所以我们会再试一次,但万一我会留下原来的答案:
那么,听起来您的团队成员直接写入已部署的环境?可能不应该是可能的,但是好的......你问如何恢复他的变化,或者如何将它们纳入git历史?
如果部署的环境本身就是一个git repo,那么它只有一堆本地未提交的更改。 git status
应该显示它们是什么以及如何处理它们(无论是还原还是保留)。
如果部署的环境不是 git repo,您可以将其内容复制到repo的工作树上并提交或从那里恢复。
原始回答
老实说,问题不是100%明确,但我认为我明白你想做什么。你有
A --- B --- C --- X <--(master)
其中X
是“错误”提交。你要求跟踪所有“从零开始”;根据定义,这是一个新的回购,但因为你要求我必须假设你正在寻找更好的东西;大概是因为X
之前的历史是有价值的。
你有几个选择。请注意,如果X
是HEAD,那么任何修复都是最简单的,这就是我将如何显示它们。如果没有,请在评论中跟进,我们可以根据您喜欢的技术进行调整。
您可以恢复提交(创建一个撤消它所做的一切的新提交)。
git revert HEAD
在共享存储库中,这是最安全的解决方案,但它确实将X
保留在最终历史记录中。
A --- B --- C --- X --- ~X <-- (master)
~X
处的树将与C
处的树匹配。
如果您真的必须从历史记录中删除X
,那么您可以这样做,但访问存储库的每个人都必须“从恢复将以意外方式移动的事实中恢复”。
git reset --hard HEAD^
git push -f
现在任何在本地拥有X
的人都必须重新同步;请参阅git docs中的“从上游重新恢复”部分:https://git-scm.com/docs/git-rebase