我克隆了一个 Git 仓库,然后尝试将其回滚到开发过程中的特定提交。对于在该点之后添加到存储库的所有内容,我都不关心,因此我想从我的本地源代码中省略所有后续更改。
然而,当我尝试在 GUI 工具中回滚时,它并不会更新我的本地文件系统-我总是最终得到项目的最新源代码。
有什么正确的方法只获取存储库的某个历史提交作为源,并省略以后的所有更新?
我克隆了一个 Git 仓库,然后尝试将其回滚到开发过程中的特定提交。对于在该点之后添加到存储库的所有内容,我都不关心,因此我想从我的本地源代码中省略所有后续更改。
然而,当我尝试在 GUI 工具中回滚时,它并不会更新我的本地文件系统-我总是最终得到项目的最新源代码。
有什么正确的方法只获取存储库的某个历史提交作为源,并省略以后的所有更新?
git push -f <remoterepo> master
来恢复远程仓库。但是,请注意,使用 -f
开关后,恢复提交后的提交也会在远程仓库上丢失!(这正是我想要的,但其他人可能希望保留历史记录)。 - Kounavi由于跟踪分支的创建和推送方式发生了变化,我不再建议重命名分支。现在我建议如下操作:
复制当前状态的分支:
git branch crazyexperiment
(执行git branch <name>
命令会让你仍然停留在当前分支。)
使用git reset
将当前分支重置为所需的提交:
git reset --hard c2e7af2b51
(将c2e7af2b51
替换为您想要回退的提交。)
当您决定您的疯狂实验分支不包含任何有用的内容时,您可以使用以下命令删除它:
git branch -D crazyexperiment
git reflog
。即使没有分支或标签指向它们,Git也会保存提交一段时间。git branch -m crazyexperiment
检查您的好提交:
git checkout c2e7af2b51
git checkout -b master
现在,如果您想稍后查看它,仍然可以保留您的疯狂实验,但是您的主分支已回到您最后一个已知的好状态,准备添加。如果您真的想放弃您的实验,可以使用:
git branch -D crazyexperiment
git branch --set-upstream master <remote>/<branch>
和 git branch --set-upstream crazyexperiment <remote>/<branch>
。 - auspicious99如果您倾向使用git gui,您也可以使用gitk。
右键单击要返回的提交,选择“将主分支重置到此处”。然后在下一个菜单中选择hard模式。