我在我的分支机构中做了一系列提交。然而,最后3个左右是错误 - 我想要恢复'我的分支到之前的提交。
Google搜索我发现的问题我必须使用git log
来获取我想要返回的提交的ID,然后git checkout <id>
。但除此之外我找不到任何信息。
当我结账时,我不再在原来的分支内。如何合并回原始分支,从而撤消先前错误提交中的更改?
答案 0 :(得分:0)
如果您只想添加恢复文件状态的新提交,
首先,使用+--------------------------------------------------------+
| Querys |
+--------------------------------------------------------+
| ALTER TABLE database_name.table_name1 ENGINE = innodb; |
| ALTER TABLE database_name.table_name2 ENGINE = innodb; |
| ALTER TABLE database_name.table_name3 ENGINE = innodb; |
| ALTER TABLE database_name.table_name4 ENGINE = innodb; |
+--------------------------------------------------------+
删除所有文件(小心不要删除rm
)。您也可以使用.git/
,但要注意git rm -f
更改。
然后,从提交中获取所有文件(使用.gitignore
获取提交SHA):
git log
这里星号被转义以防止shell扩展。 Git将进行扩展。如果你使用的是Unix shell,你也可以使用单引号:
git checkout 1234567 \*
提交提取的文件:
git checkout 1234567 '*'
瞧!
答案 1 :(得分:0)
当你从另一个分支创建一个分支时,会创建两个行,这些行可能会占用不同的行,然后在分支当前不能查看提交其他分支,因为它们是独立的,但是如果你在那里完成了你的工作分支假设被称为&#34; dev&#34;那么如果你想运行你的主分支(主)只有你应该确认你的滞留区域让你的分支像这样:firts验证你当前的分支git branch
它显示当前HEAD的名称他们去主人{ {1}}最后marge branches git checkout master
(dev = name_of_your_branch),您可以使用git marge dev
显示两个分支的所有日志
答案 2 :(得分:-1)
如果你想完全删除最后一个提交和工作目录与最后两个提交一致(HEAD ~~):
git reset --hard HEAD ~~
但是如果您不想修改提交历史记录(因为您希望保留错误的提交或者您已将其推送到公共存储库),只需恢复到早期状态但保留错误的提交,那么iBug的checkout方法更好。 您的解决方案的问题是'git checkout不会仅将分支指针移动到头指针,因此会进入分离的头状态。如果您检查单个文件而不提交,那么您的指针仍保留在原始位置,因此您不需要在之后进行合并。 (我的代码的一些解释: 上面的命令不只是移动HEAD指针,而是主分支指针两步回到HEAD ~~,并更新工作目录(和索引)以与提交HEAD重合~~
HEAD:当前提交 HEAD~:之前的提交 HEAD ~~ HEAD ~~~ ..等)