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



我已经在我的分支中进行了一系列提交。但是,最后 3 个左右是错误 - 我想将我的分支"恢复"到以前的提交。

谷歌搜索我理解的问题,我必须使用git log来获取我要返回的提交的 ID,然后git checkout <id>.但我找不到除此之外的信息。

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

如果您只想添加一个恢复文件状态的新提交

首先,使用rm删除所有文件(注意不要删除.git/(。您也可以使用git rm -f,但请注意.gitignore更改。

然后,从提交中获取所有文件(使用git log获取提交 SHA(:

git checkout 1234567 *

这里对星号进行转义以防止外壳膨胀。Git 将进行扩展。如果你使用的是 Unix shell,你也可以使用单引号:

git checkout 1234567 '*'

提交提取的文件:

git add -A
git commit

瞧!

当你从另一个分支创建一个分支时,创建了两条线,可以采取不同的行,然后在分支中当前无法查看提交其他分支,因为是独立的,但是如果你完成了在该分支中的工作,假设被称为"dev",那么如果你想运行你的主分支(master(,你应该确认你的停滞区域 marge 你的分支是这样的: 首先验证您当前的分支git branch它显示当前 HEAD 的名称 他们转到主git checkout master,最后git marge dev(dev = name_of_your_branch(合并分支,您可以显示两个分支的所有日志git log --graph

我发现的最万无一失的方法就是再次克隆存储库,以便在另一个文件夹中拥有存储库的第二个副本。假设您已经这样做了,并且有文件夹MyRepo和MyRepo2,这两个文件夹都指向存储库所需分支中的最新版本。

现在查看MyRepo2中特定的良好提交,然后使用文件比较工具查看MyRepo和MyRepo2之间的文件发生了变化。然后,您可以将更改后的文件从 MyRepo2 复制到 MyRepo,签入并推送。

以上可以在一行中完成,如对类似问题的出色回答中所述。

git diff --binary HEAD commit_sha_you_want_to_revert_to | git apply

如果你想完全删除最后一个要提交的目录和工作目录,以与最后一个但两个提交重合(HEAD~~(:

git重置--硬头~~

但是,如果您不想修改提交历史记录(因为您想保留错误的提交或已经将其推送到公共存储库(,只需恢复到以前的状态但保留错误的提交,那么 iBug 的结帐方法更好。 您的解决方案的问题在于'git checkout不会移动分支指针,只会移动头部指针,因此进入分离的头部状态。如果您签出单个文件并且没有提交,那么您的指针将保留在其原始位置,因此之后无需合并。 (对我的代码的一些解释: 上面的命令不仅移动了 HEAD 指针,还移动了主分支指针两步到 HEAD~~,并更新工作目录(和索引(以配合提交 HEAD~~

头:当前提交 头~ : 上一次提交 头~~ 头~~~。。等(

相关内容

  • 没有找到相关文章

最新更新