作者:yuanju1984 | 来源:互联网 | 2023-05-18 05:04
我在github上分叉了一个项目,以便发送pull请求.问题是我的做法非常......肮脏.
我在fork的本地副本上工作,为我的修改创建了一个分支并将其合并到master上.然后我在github fork上推送master,以便创建一个pull请求.
问题是,最近,我的拉取请求被拒绝了.所以现在我从原来的主人那里提前5次提交.有什么解决方案才能与原始存储库保持一致?
我是否应该检查新分支中的上游主服务器并使用它创建新的主服务器(如何执行此操作?)
或者更好的是删除我的github fork(我之前接受了提交)并重新创建它(你可以在这里看到github repos)https://github.com/cedlemo/ruby-gnome2
1> VonC..:
首先,你应该总是让你的公关成为一个分支,而不是master
.
master
用于镜像upstream/master
,' upstream
'是您分叉的原始仓库的名称.
在您的情况下,请确保upstream
存在,创建分支以引用当前的修补程序,并重置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
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 checkout 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
将master
在更新后重置HEAD upstream/master
,以便master可以反映与原始repo中完全相同的历史记录.
但是,由于某些提交先前已经完成master
并推送到fork(origin/master
)上,因此您需要将该历史记录替换为新master
状态.因此git push --force
.
重新启动mybranch允许那些当前补丁基于原始仓库的最新提交.