我处境很复杂,因为我不熟悉git;
我在远程进行了一次主提交,我在本地调用了一个名为fix-bug-online-offline-support
的分支。
在我的工作期间,另一名团队成员更换了远程主人,我把它拉了。
但我需要将我的分支fix-bug-online-offline-support
拆分为两个分支;
fix-bug-online-support
fix-bug-offline-support
我已将分支fix-bug-online-offline-support
的名称更改为fix-bug-online-offline-support
并且需要将一些提交从fix-bug-online-support
移到fix-bug-offline-support
注意:这两个分支都是本地分支,我有提交的哈希字符串
答案 0 :(得分:3)
简短回答:您可以使用cherry-pick
进行提交并将其放入fix-bug-offline-support
和rebase -i
,然后从原始分支中删除提交。< / p>
答案很长:据我了解,你有类似的东西
A - B - C - D - E
L fix-bug-offline-support
你希望最终得到像这样的东西
A - C' - E'
\ L fix-bug-offline-support
\
- B' - D'
L fix-bug-online-support
你可以这样做:
git checkout A # replace A with the sha1 of this commit for instance
git checkout -b fix-bug-online-support
git cherry-pick B
git cherry-pick D
此时我们已经
了A - B - C - D - E
\ L fix-bug-offline-support
\
- B' - D'
L fix-bug-online-support
所以我们仍然需要从fix-bug-offline-support
删除这些提交,我们使用
git checkout fix-bug-offline-support
git rebase -i A
并从rebase -i
命令后显示的文本编辑器中删除与B
和D
对应的行
最后的微妙:请注意,我们实际上并没有“移动”提交。我们宁愿创建新的提交。这可能听起来像是一种迂腐的细微差别,但实际上当我们对这些细微差别没有给予足够的重视时,Git很难理解。所以,澄清一下:
cherry-pick
时,我们实际上在其他地方重新应用了补丁,git最终创建了一个带有新sha1的新提交(例如:这就是为什么在提交B
上方的图中转为提交B'
:它们不是同一个对象)C'
和E'
一个实际的推论是,在我们的操作结束时,初始提交E
仍然存在。我们不在乎,因为我们不需要它,无论如何它不再可以从分支机构访问,所以它不会阻止我们。但这是一个好消息,因为如果我们注意到我们搞砸了,我们仍然可以检索它
答案 1 :(得分:0)
首先尝试将origin master合并到本地分支fix-bug-online-offline-support(反向合并)。您的本地分支现在与原始主数据库保持同步。现在,您可以继续在此分支中工作。 您还可以将本地分支拆分为两个在线离线分支。