无法在GitHub上删除不需要的提交

3
我有两个不必要的提交需要删除。 因此,我使用了以下命令git push -f origin HEAD^:mastergit push -f origin HEAD^^:master来删除这些提交。 删除成功后,我像往常一样执行了git push。 但是,当我推送新的提交时,已从GitHub中删除的提交会再次被推送回GitHub存储库。 如何推送最新提交而不将已删除的提交推送到GitHub存储库。
以下是正在发生的事情:
|
|----fresh-commit
|
|----unwanted-commit(deleted but pushed back)
|
|----unwanted-commit(deleted but pushed back)
|
|----previous-commits

what I want is this way:

|
|----fresh-commit
|
|----previous-commits
|

搞定了。1)先将你的代码复制粘贴到其他地方,因为在接下来的步骤中你的工作会丢失。2)然后执行 git reset --hard HEAD^ 命令。这将从你的本地提交中移除最近的提交并回退一步。3)将你的代码再次复制粘贴到文件中。4)执行 git add... git commit ... 然后推送到你的 Github。 - Deke
3个回答

1
你已经成功地将之前的提交推送到远程,但当你执行 git push 时,会再次将本地更改推送。如果你不想看到它们,可以删除本地更改(在删除不需要的提交后从头克隆项目),或者执行以下操作:
git checkout HEAD~2
git branch -D master
git checkout -b master
git push -f origin master

按照您的要求创建一个新的主分支!


1
在你强制推送到备份 origin 的主分支后,它应该已将你的本地远程跟踪分支 origin/master 移动到旧的 HEAD~2 提交,之后你可以只使用 git rebase -i HEAD~3 命令删除有问题的提交,然后推送(无需强制推送,因为它是快进合并)。

0

给定:

  • commit_D
  • commit_C(不需要的 #1)
  • commit_B(不需要的 #2)
  • commit_A

步骤:

  1. git log 显示最近提交的哈希值。

  2. git reset --soft HASH_OF_commit_C(不需要的提交 #1) 删除最后一次提交,但保留未暂存的更改。

  3. git stash 暂存您的更改。

  4. git reset --hard HASH_OF_commit_A 将分支重置为 commit_A 状态,但不保留您的更改。

  5. git stash apply 应用来自暂存区(commit_D)的更改。

  6. git add .; git commit -am "fresh-commit" 添加文件并提交。

  7. git log 请确保不需要的提交已被删除。

  8. git push --force 更新远程分支树,不包括 commit_B 和 commit_C。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接