我 fork 了某人的项目并做了一些提交。我填写了一个 pull request,但它没有被接受(要么更改不受欢迎,要么作者重写了功能以符合“他的风格”)。现在我被我的本地 fork 困住了,有一些额外的提交永远不会进入上游。我可以取消更改集,但是我有两倍多的额外提交并且将不得不永远拖延它们。太丑了!
放弃这些没人想要的提交并让我的分支回到上游跟踪的最佳方法是什么?我知道我可以完全删除 fork 并重新 fork 它,但这真的很笨拙,我会失去我正在做的任何其他工作。
最佳答案
您可以将您的 repo 状态重置为较早的提交。首先弄清楚你想将你的 repo 重置为哪个提交:
git log
要将您的存储库重置为该状态:
git reset --hard <commit_hash>
如果您有一个 fork 的远程仓库,您可以将这些更改推回给它:
git push -f <remote> <branch>
尽管如此,您可能希望更改工作流程以使将来的事情变得更容易。
当我 fork 一个存储库并对其进行自己的更改时,我首先设置了两个 Remote 。一个远程将指向我的 fork repo (例如:origin
),并将另一个远程指向从 fork 的原始 repo (例如:original_repo
)。所以我可能有类似的东西:
$ git remote
origin
original_repo
我创建了一个分支来完成我所有的工作,例如:feature
。发出 pull 请求时,我从 feature
分支到 original_repo
master
分支。如果 pull 请求被拒绝,就像你的例子一样,你可以放弃这个分支。如果您想进行更多修改,只需从 master
创建另一个分支并使用它来工作。
我也不会提交或 merge 任何本地更改到 master
分支。我只使用 master
分支与 original_repo
master
分支同步。例如:
git checkout master
git fetch original_repo
git merge original_repo/master
这确保 master
分支始终与原始 repo 的 master
分支同步。例如,如果 pull 请求被接受并 merge ,当提取和 merge 发生时,本地 master
也将拥有原始 repo 中使用的所有“已批准”代码。
基本上使用 master
与原始 repo 的 master
同步,并在您想要进行编辑时始终从 master 分支。将这些分支用于对原始存储库的 pull 请求。
关于git - 放弃 GitHub 上被拒绝的 pull 请求的 Git 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9538320/