我需要删除fork的提交

时间:2013-03-26 22:10:44

标签: git github

好的,我做了一些蠢事。

  • 我分了一个我应该贡献的回购。
  • 所以我随后创建了一个名为“blafile”的文件来检查我是否可以提交(显然我 不知道什么是fork)并且提交了一条消息“check I can commit”。
  • 我推到了我的github分叉回购并忘了它。
  • 我开始在第二天修复一个错误。
  • 我提交了我的修复并推送到我的分叉回购邮件,其中包含“修复bug xyz”的消息。

现在我想发出一个拉取请求,突然间我看到了“检查我可以提交”提交。我宁愿不喜欢那样出现在拉动请求中。 :)

我可以完全删除该提交吗?我可以在一次提交时发出拉取请求,还是会提取我的所有提交?

我知道我可以在本地git reset --hard HEAD~1(这是我可以快速重做的一个小修复),但这只能修复我的本地仓库,而不是我的github(分叉)仓库。

2 个答案:

答案 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