所以我设法在不知何故的某个地方把我的回购搞得非常糟糕。
基本上,我现在拥有的是#34; Master" branch,包含我所有的旧版本代码和一个" master"分支(注意不同的情况),其中包含所有新的重新编写的代码(几乎完全从头开始重写)。更不用说这两个中的每一个的分支(不太担心它们)。
基本上,我想做的是移动" Master"中的所有提交。分支到目前"主人的基础"分支,然后为当前在" master"上的所有内容创建一个新分支。分支。
为了说明这一点,我的repo目前看起来像这样(X代表重建前的最后一次提交,Y代表重建的第一次提交):
Master master
X /
\ /
\ /
\ Y
我希望它看起来更像:
newBranch (that was "master")
/
/
/
Y
X
|
|
|
master (that was "Master")
因为这更准确地反映了事物的现实(不知道这是如何搞砸的。
如果这不容易实现,我只会咬紧牙关,删除"主人"从这个回购分支,留下它作为一个旧的回购,然后将返工添加到一个新的,但我宁愿不这样做。
有可能吗?我怎么能去实现这次改组?
答案 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>~1
是Y
的父提交。您应该只找到Y
的提交ID(例如5d2bf07
),然后命令git rebase --onto Master 5d2bf07~1 master
会将提交从Y
重新绑定到master
上的最新提交分支在Master
分支的顶部。