我在 github 上 fork 了一个项目,以便发送 pull 请求。问题是我的做法非常……肮脏。
我在分支的本地副本上工作,为我的修改创建了一个分支并将其 merge 到主分支上。然后我将 master 推送到 github fork 上以创建 pull 请求。
问题是最近,我的 pull 请求被拒绝了。所以现在我比原来的主人提前 5 次提交。为了与原始存储库保持一致,有哪些解决方案?
我是否必须检查新分支中的上游 master 并使用它创建新的 master(怎么做?)
还是删除我的 github 分支(我以前接受过提交)并重新创建它(您可以在此处查看 github 存储库)更好https://github.com/cedlemo/ruby-gnome2
最佳答案
首先,你应该always make your PR form a branch ,不是来自 master。
master 用于镜像 upstream/master,'upstream' 是您 fork 的原始存储库的名称。
在您的情况下,请确保:
upstream 存在(git remote -v),master 重置为 upstream/master:之前:
z--z (upstream/master, with new commits)
/
z--y--y--y (master with local patches, origin/master)
记住当前的工作:
git checkout master
git checkout -b mybranch
# Or, With git 2.23+
git switch -c myBranch master
# if remote "upstream" does not yet exist
git remote add upstream /url/original/repo
git fetch upstream
# reset master to upstream/master
git checkout master
git reset --hard upstream/master
git push --force
y--y--y (mybranch)
/
z--z--z (master, upstream/master, origin/master)
# replay the patches (even they are rejected for now) on top of master
git switch mybranch
git rebase master
git push -u origin mybranch
y'--y'--y' (mybranch, origin/mybranch)
/
z--z--z (master, upstream/master, origin/master)
这里:git reset --hard upstream/master 将在更新后的 upstream/master 上重置 master HEAD,以便 master反射(reflect)与原始存储库中的历史完全相同的历史。
但由于某些提交以前在 master 上完成并推送到 fork (origin/master),因此您需要用新的 替换该历史记录主 状态。因此 git push --force。
rebase mybranch 允许那些当前补丁基于原始存储库的最新提交。
关于github fork : your branch is 5 commits ahead how to clean this without pushing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29049650/