将旧的 git 提交合并到当前分支的顶部

Merge an old git commit to the top of the current branch

我在我的项目中做了很少的 git 次提交(提交 1、提交 2...提交 5)。我必须修复一个错误,所以我使用以下命令恢复为提交 2 -

git checkout <commit_id> .

我更改了一些代码并提交了更改。现在,我想合并这些更改并返回到最新版本的代码(在提交 5 中)。我应该怎么办?

提前致谢!

你在一个独立的分支上。执行 git 日志以获取您当前的提交 ID,返回到您的工作分支(git 签出您的分支名称),然后 git 合并 YourCommitId,这会将这些更改合并到您的顶部分支(或者你可以尝试 rebase 然后到你当前的分支)。

如果您已经推送,那么只需在顶部提交您的修复(即在提交 5 之后)。

如果你没有,并且你想修复提交 2,你可以:

  • 提交您的修复,运行:rebase -i HEAD~5 然后将您的最新提交交换到 commit2 之后,并将其标记为 "fixup"。

或:

  • 运行:rebase -i HEAD~4,然后标记 commit2 进行编辑,提交修复,提交,然后 rebase --continue

如果您在本地存储库中完成所有操作,则 git checkout <commit_id> 您必须处于分离状态。如果你 运行 git branch 它应该显示你在 (HEAD detached at <commit_id>).

为了安全起见,请先检查您在新分支上的提交:

git checkout -b <bug_fix>

然后继续你有 5 次提交的分支(假设是 master)并重新设置修复基线:

git checkout master
git rebase <bug_fix>

编辑: 如果您在通过签出到另一个分支提交修复后离开了分离状态,您必须找到您的 commit_id git reflog,然后将它们变基到所需的分支:git rebase <commit_id>。您也可以合并,但这会在 commit5 之上添加 fix_commit。 Rebase 将生成更好的历史记录...,commit2,fix_commit,commit3, ...,commit5.