git - 放弃 GitHub 上被拒绝的 pull 请求的 Git 提交

标签 git github

我 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/

相关文章:

git - 带有登录凭据的 Bitbucket repo 克隆

ios - 如何在 Xcode 中正确使用 Git?

github - 如何检索一个人的所有 GitHub 存储库列表?

android - 在 android studio 中禁用运行按钮

git - 下载没有所有 .git 东西的 Git 仓库?

python - 如何为现有 GitHub 存储库创建 Xcode 项目

git - 仅构建已推送到的 Git 分支

git - 将旧版本的代码添加到 git repo

git - 如何做 git sub modules 以及为什么要使用 git sub module

git 仅推送存储库的一部分