移动提交到分支基地

时间:2017-08-18 14:48:08

标签: git version-control

所以我设法在不知何故的某个地方把我的回购搞得非常糟糕。

基本上,我现在拥有的是#34; Master" branch,包含我所有的旧版本代码和一个" master"分支(注意不同的情况),其中包含所有新的重新编写的代码(几乎完全从头开始重写)。更不用说这两个中的每一个的分支(不太担心它们)。

基本上,我想做的是移动" Master"中的所有提交。分支到目前"主人的基础"分支,然后为当前在" master"上的所有内容创建一个新分支。分支。

为了说明这一点,我的repo目前看起来像这样(X代表重建前的最后一次提交,Y代表重建的第一次提交):

Master  master
X        / 
 \      /
  \    /
   \  Y

我希望它看起来更像:

     newBranch (that was "master")
    /
   /
  /
 Y
X
|
|
|
master (that was "Master")

因为这更准确地反映了事物的现实(不知道这是如何搞砸的。

如果这不容易实现,我只会咬紧牙关,删除"主人"从这个回购分支,留下它作为一个旧的回购,然后将返工添加到一个新的,但我宁愿不这样做。

有可能吗?我怎么能去实现这次改组?

2 个答案:

答案 0 :(得分:2)

要完成你想要的东西,你可以做一个rebase,但由于两个分支具有相同的名称,除了大小写,由于操作系统特定的默认大小写折叠,你可能需要重命名一个分支:

git checkout master
git branch -m some_other_name

现在您有两种情况,具体取决于结帐为您带来的分支

如果您重命名Y分支

git rebase master

如果您已将其重命名为X,请执行

git checkout master
git rebase some_other_name

我会期待很多冲突。

答案 1 :(得分:1)

是的,这是可能的。您可以使用以下命令更改提交历史记录:

git rebase --onto Master <commit id for Y>~1 master
git checkout -b newBranch

然后,您的master分支将在Master分支的顶部重新定位,您可以从newBranch创建master

注意: <commit id for Y>~1Y的父提交。您应该只找到Y的提交ID(例如5d2bf07),然后命令git rebase --onto Master 5d2bf07~1 master会将提交从Y重新绑定到master上的最新提交分支在Master分支的顶部。