我已经分叉某人的项目并做了一些提交.我填写了一个pull请求,但它没有被接受(要么改变不可取,要么作者重写了与"他的风格"一致的功能).现在我坚持使用我的本地fork有一些额外的提交,永远不会进入上游.我可以退出更改集,但之后我有两倍的额外提交,并且必须永远推送它们.这太丑了!
放弃这些没有人想要的提交并让我的分支回到上游跟踪的最佳方法是什么?我知道我可以完全删除分叉并重新分叉,但这真的很严重,我会失去我正在做的任何其他工作.
tri*_*iad 22
您可以将repo状态重置为先前的提交.首先找出要将repo重置为哪个提交:
git log
Run Code Online (Sandbox Code Playgroud)
要将您的仓库重置为该状态:
git reset --hard <commit_hash>
Run Code Online (Sandbox Code Playgroud)
如果你有一个分叉的远程仓库,你可以将这些更改推回到它:
git push -f <remote> <branch>
Run Code Online (Sandbox Code Playgroud)
您可能希望更改工作流程,以便将来更轻松.
当我分叉回购并对其进行自己的更改时,我首先设置了两个遥控器.一个遥控器将指向我的分叉仓库(例如:)origin
,并将另一个远程点添加到分叉的原始仓库(ex :) original_repo
.所以我可能有类似的东西:
$ git remote
origin
original_repo
Run Code Online (Sandbox Code Playgroud)
我创建了一个分支来完成我的所有工作,例如:feature
.在发出拉取请求时,我从feature
分支到original_repo
master
分支执行.如果拉取请求被拒绝,就像您的示例一样,您可以放弃此分支.如果您想进行更多修改,只需创建另一个分支master
并使用它来工作.
我也不提交或合并任何本地更改到master
分支.我只使用master
分支与original_repo
master
分支同步.例如:
git checkout master
git fetch original_repo
git merge original_repo/master
Run Code Online (Sandbox Code Playgroud)
这可确保master
分支始终与原始repo的master
分支同步.例如,如果拉取请求被接受并合并,当获取和合并发生时,本地master
也将拥有原始仓库中使用的所有"已批准"代码.
基本上用于master
与原始repo同步,master
并且当您想要进行编辑时始终从master分支.使用这些分支来获取原始仓库的请求.