我编辑了一个较旧的git提交,现在我想推它并使它成为HEAD

问题描述 投票:0回答:1

我克隆了存储库,检查了一个早期的提交,然后进行了一些更改。现在我想把它作为HEAD(提交/推送并使其成为HEAD) - 较新的提交将变得过时。

我怎样才能做到这一点?

这不是How to move HEAD back to a previous location? (Detached head)的副本,因为我首先要提交更改,然后将新提交标记为HEAD。

git git-commit git-push
1个回答
1
投票

HEAD只是您目前检查的提交的引用;不多也不少。

签出特定提交会将HEAD移动到该提交。进行新提交会将HEAD移动到新提交中。

在你的例子中:

当您检出克隆存储库的早期提交时,您将HEAD移动到之前的提交。如果您随后进行了新的提交,则将HEAD移至此新提交。如果您之后没有检出任何其他分支/提交,HEAD仍将指向您的新提交。

如果我正确地解释你的场景,听起来好像你可能已经使用git checkout <commit-hash>或类似的方式直接检查了早期的提交。如果是这样,您将处于分离的HEAD状态。这不会改变现有的提交历史记录。此外,您通常不希望在此状态下进行新提交,因为切换分支后您将无法返回到它们。您可以在此状态下添加另一个分支并从那里安全地提交,但听起来好像您实际上打算恢复远程仓库中的更改,而不是进行新的更改并将其与现有历史记录并行运行。

您可能正在寻找的是git reset --hardgit revert

git reset --hard从当前分支中删除提交。因此,让我们假设您想要处理的早期提交是当前分支提示后面的两个提交。当您克隆repo时,而不是在此提交上运行git checkout,您可以运行git reset --hard HEAD~2(其中HEAD~2表示比HEAD当前指向的位置更早的两次提交)。这会将分支提示返回到先前的提交,并且任何新提交都将成为新的分支提示。请小心使用此命令,因为它会(几乎)永久地丢弃重置提交后的原始提交。

另一种选择,git revert,实现了类似的目标,而没有永远丢弃原来的后期提交。它查看了您想要恢复的早期提交,而不是简单地回滚到它并放弃后面的提交,它创建了早期提交的副本,并将其放在提交历史记录中的现有提交之后。

我可能完全误解了你的问题,但希望这有点有用!

一个很好的资源解释HEADgit resetgit checkoutgit revert可以找到here

© www.soinside.com 2019 - 2024. All rights reserved.