无法删除在github上进行的不需要的提交

时间:2016-08-12 04:09:14

标签: git github

我有两个不必要的提交必须删除。因此,使用此命令git push -f origin HEAD^:mastergit push -f origin HEAD^^:master删除提交。哪个删除成功。之后我像往常一样继续git push。但是当我git推送新提交时,github上的已删除提交会再次被推回到github repo。如何在不将已删除的提交推送到github存储库的情况下推送新提交。

这就是发生的事情:

|
|----fresh-commit
|
|----unwanted-commit(deleted but pushed back)
|
|----unwanted-commit(deleted but pushed back)
|
|----previous-commits

我想要的是这样:

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

3 个答案:

答案 0 :(得分:0)

您已成功将之前的提交推送到远程,但是当您执行git push时,会再次推送您的本地更改。如果您不想看到它们,可以删除本地更改(删除不需要的提交后从头开始克隆项目)或执行以下操作:

git checkout HEAD~2
git branch -D master
git checkout -b master
git push -f origin master

根据需要创建一个新的主分支!

答案 1 :(得分:0)

强制推送到备份来源的主人后,它应该将您的本地远程跟踪分支origin / master移动到旧的HEAD~2提交,之后您可以git rebase -i HEAD~3并删除违规行为提交然后推送(并且不需要强制,因为它可以快速转发)。

答案 2 :(得分:0)

下式给出:

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

步骤进行:

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

  2. git reset --soft HASH_OF_commit_C (unwanted-commit #1) 它会删除最后一次提交,但会保持您的更改不会暂停。

  3. git stash 它现在会隐藏你的更改。

  4. git reset --hard HASH_OF_commit_A 在不保留更改的情况下重置commit_A状态的分支。

  5. git stash apply 从stash(commit_D)

  6. 应用您的更改
  7. git add .; git commit -am "fresh-commit" 添加文件并提交

  8. git log 请确保不再存在不需要的提交

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