Git中将分支从主分支移动到另一个分支

5
我通常使用Subversion,现在正在适应Git。我将远程仓库的副本克隆到了我的本地主机上,并创建一个名为“myNewBranch”的新分支。但是,我是从主分支(master)创建的,而它应该是"DEVELOPMENT"的子分支。
以下是我所采取的步骤:
  1. git clone 远程URL 本地主机
  2. git checkout -b mynewBranch(应该先切换到DEVELOPMENT分支)
  3. git add {修改过的文件}
  4. git commit
  5. git push origin myNewBranch
下面是正确的分支层级结构:
Master---> DEVELOPMENT ---> myNewBranch
而目前的分支层级结构如下: Master---> myNewBranch
我该如何予以纠正?
2个回答

10

只需将您的新分支上变基到开发分支之上即可。

git checkout myNewBranch
git rebase development

1
这需要更多的信息:假设开发分支设置在主分支之上(并且假设主分支没有与开发分支分叉),那么你可以像@Igal所说的那样进行变基。 - eftshift0
@eftshift0,感谢你的帮助。很抱歉听起来像个新手(我确实是,一直在阅读文档以提高技能),但这样做是否会将对myNewBranch所做的所有更改合并到master中进行?这是否真的会从master中删除myNewBranch分支?这里的目标是允许我检出我的分支副本,并在DEVELOPMENT下提交任何其他更改吗? - Bad Programmer
1
我不想理解你所有问题的含义,所以这是我对正在发生的事情的简要说明。Rebase,顾名思义,意味着将修订或修订链的基础移动到历史上的另一点。您从_master_而不是_development_开始了您的功能分支,您希望将该小分支的基础从master移动到development.....通过运行git rebase development,您要求git将属于您的分支并且不是开发历史记录的1(或x)个修订版本移动到开发之上。 - eftshift0
1
主分支不会动...开发分支也不会动。只有你的分支会动。 - eftshift0
@eftshift0:感谢您的澄清,这样更有意义。我想我有点困惑,因为答案说要“rebase master”,但听起来我想运行“rebase development”来将我的分支移动到开发分支。 - Bad Programmer
还有,如果其他人碰巧遇到这个问题,我发现另一个SO问题提供了更多细节:https://dev59.com/b2Ei5IYBdhLWcg3wPKax - Bad Programmer

1
我接受了Igal S.的答案,不过我使用了cherry-pick而不是rebase。
我只有一个提交,而且我的提交是最后一个,所以我将DEVELOPMENT检出到一个新分支:
git checkout -b myNewBranch DEVELOPMENT

然后在我的提交上运行了cherry-pick(需要获取十六进制校验和)。

git cherry-pick <hex checksum>

然后解决了冲突。

之后,我从cherry pick提交更改,然后在本地和主分支上删除了我的旧分支。我对git还很陌生,所以不要把我的话当作解决方案,但如果其他人遇到同样的问题可能会有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接