要处理与当前正在开发的功能相关的问题,项目的协作者使用GitHub Desktop应用程序从功能分支创建了新的-1分支。然后他们在issue-1分支中添加了一堆提交。创建分支时出错,现在提交历史记录看起来不正确。下面的图表应该有助于解释预期和实际发生的情况。
0)在新分支之前:
A - B - C - D (feature)
1)预期历史:
E - F - G (issue-1)
/
A - B - C - D (feature)
2)实际历史:
A - B - C - D - E - F - G (issue-1)
^
(feature)
3)向功能分支添加提交会产生如下树:
H - I (feature)
/
A - B - C - D - E - F - G (issue-1)
4)而不是像这样(这是我们想要的):
E - F - G (issue-1)
/
A - B - C - D - H - I (feature)
在历史记录中,原始提交A-B-C-D现在似乎与 问题-1分支和功能分支相关联。提交E-F-G似乎只在问题1分支上(这是正确的)。
我想从状态2到状态1(上面)获得回购。由于提交E-F-G已经在他们自己的分支上,我认为所有需要发生的事情是早期的提交需要与issue-1分支分离。什么是适当的git命令系列,用于恢复提交的原始状态A-B-C-D仅在功能分支上,而不是功能和问题1?
如果这是重复的道歉。我找不到这个问题的解决方案,但我可能一直在寻找错误的东西。
答案 0 :(得分:1)
git中的分支只是指向存储库历史记录中特定提交的指针。因此,当您从(feature)分支创建(issue-1)分支时,它指向同一个commit(D)。当你继续进行提交时,你正在移动你的(issue-1)指针来引用那些新的提交(E),(F)和(G),而你的特征分支仍然指向commit(D)。
当您将存储库签出到功能分支(指向提交D)并继续对其进行新提交时,您将(功能)的指针移动到提交(H)和(I)。两个分支具有相同的历史,直到提交(D),它们是分歧的地方。
总而言之,您的提交历史记录没有任何问题,您根本不需要修改它。
有关git分支的更多详细信息,请参阅https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell。
答案 1 :(得分:0)
从图论的角度来看,片段3和4是相同的 - 它们只是在视觉上如何绘制它们。所以,你很好,没有什么需要改变。
当您从现有分支创建新分支时,新分支会在创建时自动“继承”现有分支的所有提交 - 这是Git的工作方式。