2017-08-18 61 views
0

因此,我设法将我的回购在某个地方的某个地方严重地搞砸了。基本上,我现在拥有的是一个“主”分支,它包含我所有的旧版本代码和一个“主”分支(注意不同的情况),它包含所有新的返工代码(几乎完全从刮)。更不用说这两个中的每一个的一堆分支(不太担心它们)。移动提交到分支基地

所以基本上,我想要做的是将“主”分支中的所有提交移动到当前“主”分支的基础上,然后为当前所有内容的所有内容创建一个新分支“主”分支。

为了说明这一点,我的回购目前看起来是这样的(X代表最后一次提交改造前和Y第一次提交的重建):

Master master 
X  /
\ /
    \ /
    \ Y 

而且我希望它看起来更喜欢:

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

随着更准确地反映现实的东西(不知道这是怎么搞砸了

如果这是不容易实现我就位e子弹,删除从这个回购的“主”分支,把它作为一个传统的回购,然后将返工添加到一个新的,但我宁愿不这样做。

可能吗?我该如何去实现这一重新洗牌?

+0

由于在Windows和MacOS文件系统上的缺省大小写折叠 - 其中名为“hello.txt”的文件是名为“Hello”的文件的* same *文件。txt“ - 这是一个非常糟糕的想法,有两个分支的名称仅在大小写不同的情况下,在解决下一个部分之前重命名其中的一个或两个分支 – torek

回答

2

来完成你愿意,你可以做一个重订什么,而是因为两个分支具有相同的名称,案件的旁边,由于OS特定的默认情况下折叠,你可能需要重命名一个分支:

git checkout master 
git branch -m some_other_name 

现在你有两个方案,这取决于分支结账给你带来了

如果改名为Y分歧做

git rebase master 

如果你insted的改名X,做

git checkout master 
git rebase some_other_name 

虽然我会期待很多冲突。

+0

我只是收到一条消息,说”当前分支主机是最新的。 “当我运行它的时候,它看起来好象是rebase命令是区分大小写的, –

+0

似乎是操作系统特定的,无论如何,你可以将master重命名(并不重要),并执行rebase? – Francesco

+0

随着重命名这工作,谢谢!我将来会更加小心 –

1

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

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

然后你master分公司将变基上Master分支的顶部,你可以从master创建newBranch

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

相关问题