【问题标题】:Merge an old git commit to the top of the current branch将旧的 git commit 合并到当前分支的顶部
【发布时间】:2015-11-05 11:22:31
【问题描述】:

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

git checkout <commit_id> .

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

提前致谢!

【问题讨论】:

  • 您在还原之前是否已推送到远程?

标签: git merge git-commit revert


【解决方案1】:

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

为了安全起见,首先在新分支上签出您的提交:

git checkout -b <bug_fix>

然后继续你有 5 次提交的分支(假设是 master)并 rebase 修复:

git checkout master
git rebase <bug_fix>

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

【讨论】:

  • 我做了 git checkout .
  • 如果你运行git branch,输出是什么?
  • 如果我做一个 git 分支,我看不到“HEAD 在 commit_id 处分离”
  • 我相信你在提交修复后有git checkout master。如果是这样,那么这就是你应该问的问题:how-do-i-get-my-detached-head-commits-back-into-master
【解决方案2】:

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

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

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

或:

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

【讨论】:

  • 谢谢,我需要遵循选项 1,因为我已经提交了修复。 (提交您的修复,运行:rebase -i HEAD~5 然后将您的最新提交交换到提交 2 之后,并将其标记为“修复”。)我将重新设置它,但是如何将最新提交交换到提交 2 之后?
  • 当您运行 rebase -i HEAD~5 时,它会打开一个编辑器(在您的 git 设置中配置的那个),其中包含您的 5 个最新提交。将最新的提交剪切并粘贴到相关行
【解决方案3】:

你在一个分离的分支上。做一个 git log 来获取你当前的提交 id,返回到你的工作分支(git checkout yourBranchName),然后 git merge YourCommitId,这会将这些更改合并到你的分支之上(或者你可以尝试重新定位到你当前的分支)。

【讨论】:

  • 我在 master 分支上做了这些。我没有单独的分支
  • 当你执行“git checkout ”时,你会被 git 放到所谓的分离分支上,因为你在没有分支名称的情况下进行提交以完成这项工作。
猜你喜欢
  • 1970-01-01
  • 2021-01-12
  • 2016-09-20
  • 2014-03-08
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
相关资源
最近更新 更多