我有两个不必要的提交必须删除。因此,使用此命令git push -f origin HEAD^:master
和git 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
|
答案 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)
下式给出:
步骤进行:
git log
显示所有最近提交的哈希值
git reset --soft HASH_OF_commit_C (unwanted-commit #1)
它会删除最后一次提交,但会保持您的更改不会暂停。
git stash
它现在会隐藏你的更改。
git reset --hard HASH_OF_commit_A
在不保留更改的情况下重置commit_A状态的分支。
git stash apply
从stash(commit_D)
git add .; git commit -am "fresh-commit"
添加文件并提交
git log
请确保不再存在不需要的提交
git push --force
更新远程分支树,不包含commit_B和commit_C。