好的,我做了一些蠢事。
现在我想发出一个拉取请求,突然间我看到了“检查我可以提交”提交。我宁愿不喜欢那样出现在拉动请求中。 :)
我可以完全删除该提交吗?我可以在一次提交时发出拉取请求,还是会提取我的所有提交?
我知道我可以在本地git reset --hard HEAD~1
(这是我可以快速重做的一个小修复),但这只能修复我的本地仓库,而不是我的github(分叉)仓库。
答案 0 :(得分:10)
很多选择。
最好的选择可能是建立一个新的分支,然后挑选你的修复分支:
git checkout -b my-fix-branch origin/master
git cherry-pick master
git push -u origin my-fix-branch
然后在GitHub上从my-fix-branch
执行拉取请求。 (这假设您的工作分支名为master
,基于远程master
;根据需要更改分支名称。
如果没有人拉扯或克隆你的前叉,你可以强行重写历史。执行git rebase -i HEAD~2
并删除违规提交,然后删除git push --force
。这会打破基于你的fork的任何其他repo,所以如果你怀疑其他人正在使用你的repo,不这样做。
答案 1 :(得分:3)
我相信下面的命令序列应该可以正常运行,假设您的无效提交只是当前HEAD之前的一次提交,而分支名称是master
。
注意:以下命令将重写历史记录,如果有人已经克隆了您的回购,则不建议这样做。如果不是这种情况push -f
应该不是什么大问题。
# Switch the current working tree to master branch
git checkout master
# Soft reset to get all the changes since HEAD~2 into the index/staging area
git reset --soft HEAD~2
# Remove the blafile from the staging area
git rm --cached blafile
# Commit the changes you actually intended to make
git commit
# Update the refs on the remote forcefully to push the newer commit.
# Note that if any one else has pulled master already with your blafile
# commit, they would be really pissed off with you now.
git push -f origin master