699 git
我克隆了一个Git存储库,然后尝试在开发过程的早期将其回滚到特定的提交.在该点之后添加到存储库的所有内容对我来说都不重要,因此我想省略本地源代码中的所有后续更改.
但是,当我尝试回滚GUI工具时,它不会更新我的本地文件系统 - 我总是最终得到项目的最新源代码.
从项目历史中的特定提交中获取存储库的源代码的正确方法是什么,并省略所有后续更新?
kau*_*ppi 1091
git reset --hard <tag/branch/commit id>
Run Code Online (Sandbox Code Playgroud)
笔记:
git reset如果没有该--hard选项,则重置提交历史记录,但不重置文件.使用该--hard选项,还可以重置工作树中的文件.(贷方用户)
如果您希望提交该状态,以便远程存储库也指向回滚提交,请执行以下操作git push <reponame> -f:( 贷记用户)
Nea*_*all 390
由于更改跟踪分支的创建和推送方式,我不再建议重命名分支.这就是我现在推荐的:
以当前状态制作分支的副本:
git branch crazyexperiment
Run Code Online (Sandbox Code Playgroud)
(该git branch <name>命令将使您仍然检查当前分支.)
使用以下命令将当前分支重置为所需的提交git reset:
git reset --hard c2e7af2b51
Run Code Online (Sandbox Code Playgroud)
(替换c2e7af2b51为您要返回的提交.)
当您确定您的疯狂实验分支不包含任何有用的内容时,您可以使用以下命令将其删除:
git branch -D crazyexperiment
Run Code Online (Sandbox Code Playgroud)
当您开始使用历史记录修改git命令(重置,rebase)以在运行它们之前创建备份分支时,总是很好.最后一旦你感到舒服,你就不会觉得有必要.如果您确实以您不想要的方式修改历史记录并且尚未创建备份分支,请查看git reflog.即使没有指向它们的分支或标签,Git也会保持一段时间的提交.
比这种git reset --hard方法稍微不那么可怕的方法是创建一个新的分支.让我们假设您在master分支上,并且您想要返回的提交是c2e7af2b51.
重命名当前的主分支:
git branch -m crazyexperiment
Run Code Online (Sandbox Code Playgroud)
看看你的好承诺:
git checkout c2e7af2b51
Run Code Online (Sandbox Code Playgroud)
在这里建立你的新主分支:
git checkout -b master
Run Code Online (Sandbox Code Playgroud)
现在,如果您想稍后查看它,您仍然可以进行疯狂的实验,但是您的主分支又回到了您最后已知的优点,准备添加到.如果您真的想丢弃实验,可以使用:
git branch -D crazyexperiment
Run Code Online (Sandbox Code Playgroud)