我在github上创建了一个项目,以便发送拉取请求。问题是我的方法是非常...脏的。
我在fork的本地副本上工作,为我的修改创建了一个分支,并将其合并到master上。然后,我在github fork上推了master,以便创建一个拉取请求。
问题是,最近,我的拉取请求被拒绝了。所以现在我比原来的主节点提前了5次提交。为了与原始存储库保持平衡,有什么解决方案?
我是否必须签出新分支中的上游master,并使用它创建新master (如何操作?)
或者更好的方法是删除我的github fork (我之前已经接受了提交)并重新创建它(你可以在这里看到github repos )https://github.com/cedlemo/ruby-gnome2
发布于 2015-03-14 21:53:05
首先,你应该使用always make your PR form a branch,而不是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将在更新后的upstream/master上重置master头,以便主存储反映与原始存储库中的完全相同的历史记录。
但是,由于一些提交以前在master上完成,并在分支(origin/master)上推送,因此您需要用新的master状态替换该历史记录。因此才有了git push --force。
Rebasing允许那些当前的补丁基于原始repo的最新提交。
发布于 2018-07-26 17:46:34
我使用这个小shell脚本将分支重置为它的原点
function git_branch_reset_origin() {
branch_name="$(git symbolic-ref HEAD 2>/dev/null)"
branch_name=${branch_name##refs/heads/}
git checkout -b foo
git branch -D ${branch_name}
git checkout ${branch_name}
git branch -D foo
}简而言之,它移动到一个新的'foo‘分支,删除您所在的分支,然后再次将其签出。检出本地没有的分支将在原始分支的位置生成该名称的新本地分支。
https://stackoverflow.com/questions/29049650
复制相似问题