我在Github上有一个repo的克隆,我在其中为上游创建了一个新功能.问题是,我在我的主分支中做了那个,它还包含我从其他克隆中提取的其他内容.这完全打破了我创建合理拉取请求的能力.
所以我想做以下事情:
并且,在将来,我将在分支机构中完成所有工作并创建拉取请求,同时离开我的主分支,只需合并来自上游的任何内容.
我的问题是:
wew*_*als 65
建立一个新的分支来容纳东西
$ git branch old_master
Run Code Online (Sandbox Code Playgroud)
发送到远程进行备份(只是加入)
$ git checkout old_master
$ git push origin old_master
Run Code Online (Sandbox Code Playgroud)
在开始修改内容之前,将本地主服务器重置为提交
$ git checkout master
$ git reset --hard 037hadh527bn
Run Code Online (Sandbox Code Playgroud)
合并来自上游主站的更改
$ git pull upstream master
Run Code Online (Sandbox Code Playgroud)
现在DELETE master远程repo
在github上,如果没有先进入fork的admin部分并将默认分支暂时设置为master以外的其他东西,这将无法工作,因为它们会尝试保护您不要吹掉东西.
$ git push origin :master
Run Code Online (Sandbox Code Playgroud)
并重新创建它
$ git push origin master
Run Code Online (Sandbox Code Playgroud)
在github上,您现在应该将默认分支设置回master
这几乎是一种合理的方法,但你可能会把事情搞得一团糟.首先要做的是创建一个新的分支,其中包含您当前的master分数,这样您就不会失去对已经完成的工作的方便引用:
git branch mywork-orig master
Run Code Online (Sandbox Code Playgroud)
之后,您可以重置master为上游视图(假设您已经master签出):
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用预期的更改创建自己的分支:
git checkout -b mywork
Run Code Online (Sandbox Code Playgroud)
进行你想要的更改(从mywork-orig等中挑选它们),并发送拉取请求.
这很晚了,但是没有人建议这种更简单的方法:
# make sure we're in master
git checkout master
# create new branch from current master
git branch tmp_master
# grab most recent changes from upstream w/o applying them
git fetch upstream
# force reset local master to match upstream/master
git reset --hard upstream/master
Run Code Online (Sandbox Code Playgroud)
您将本地更改保存到,tmp_master并已强制更新master以匹配最新版本upstream/master。现在origin/master看起来像upstream/master:
git push -f origin master
Run Code Online (Sandbox Code Playgroud)
现在继续cherry-pick进行提交,或rebase在当前基础之上进行更改master。之后,您将已经有了新的devel分支。
您想做的事情完全有可能,只是不按您要求的顺序进行。似乎其他人忘记了您可以在fetch不实际应用更改的情况下进行远程更改。使生活变得更加简单。