Git:我如何签出提交并将其合并回我的分支?

时间:2018-06-04 01:12:41

标签: git git-commit

我在我的分支机构中做了一系列提交。然而,最后3个左右是错误 - 我想要恢复'我的分支到之前的提交。

Google搜索我发现的问题我必须使用git log来获取我想要返回的提交的ID,然后git checkout <id>。但除此之外我找不到任何信息。

当我结账时,我不再在原来的分支内。如何合并回原始分支,从而撤消先前错误提交中的更改?

3 个答案:

答案 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 ~~~ ..等)