2014-02-19 105 views
1

我有一个master分支和一个es分支。 es已经在本地重构:如何重建Git分支?

git checkout master 
git checkout -b es2 
git cherry-pick A C E D 
git branch -D es 
git checkout master 
git branch -m es2 es 

其中A,C,d和E是在es分支某些选定的提交。

这之后,我不得不强制推:

git push --all -f 

从开始到这一点,没有人推或回购拉动。

但一切都很顺利。当我试图在另一台计算机上重新分支分支时出现问题。此用户有此分支结构:

master - es - dev 

dev只有一个提交(例如X)。这是Git命令的问题的顺序:

git checkout master 
git pull 
git branch -f es origin/es 
git checkout dev 
git rebase es 

上次rebase产生大量的冲突与不包括在新es分支提交,但它们都包含在master分支。做一些挖掘后,我们发现,我们可以做的,而不是底垫这个重建结构:

git checkout es 
git checkout -b dev2 
git cherry-pick X 
git branch -D dev 
git checkout es 
git branch -m dev2 dev 

这让我觉得现在的问题是,“老” dev分支有一定的参考或链接旧的es分支,这就是为什么rebase试图增加到dev分支比X提交。我想知道是否有另一种更清晰的方法来使用户开发文件夹与存储库分支重新同步。

注意:用户从不更改esmaster,只是dev

回答

2

第一次尝试做rebase,你需要使用--onto标志通知Git rebasedev分支到新es分支。使用常规rebase只有在es分支上仍然有原始提交时才会起作用,因为这是rebase用作参考点的一个参考点,用于确定如何在es之上重新编写dev分支。

所以更简单的方式做你想要的东西会一直

git rebase --onto <new-base> <old-base> <branch> 
git rebase --onto origin/es es dev 

这告诉混帐采取dev分支和重订其到从origin版本的es,和它说使用本地,es的原始版本作为参考点来找出在rebase中排除什么(即,它将采取esdev之间的所有提交,但不包括es本身)。

请注意,如果你已经有了dev分公司签出,那么你可以把它出rebase命令:

git rebase --onto origin/es es