使用git,如何在保持提交的时间顺序的同时,将一个分支的内容重设为另一个分支的内容?

使用git,如何在保持提交的时间顺序的同时,将一个分支的内容重设为另一个分支的内容?,git,Git,我有三个分支机构: 发展 a、 从dev创建 b、 从dev创建 在分支a,我在15:33有一个提交a1,在15:35有另一个提交a2 在分支b,我在15h34有一个提交b1 我想把这些修改放到dev中并保存历史记录。我从分支a开始 git checkout a git rebase dev git checkout dev git merge a 这个很好用。正如我所期望的,提交在这三种情况中,因为基本上没有工作要做 然后我想用branchb获得相同的结果 git checkout b

我有三个分支机构:

  • 发展
  • a、 从dev创建
  • b、 从dev创建
在分支
a
,我在15:33有一个提交
a1
,在15:35有另一个提交
a2

在分支
b
,我在15h34有一个提交
b1

我想把这些修改放到
dev
中并保存历史记录。我从分支
a
开始

git checkout a
git rebase dev
git checkout dev
git merge a
这个很好用。正如我所期望的,提交在这三种情况中,因为基本上没有工作要做

然后我想用branch
b
获得相同的结果

git checkout b
git rebase dev
>fix conflict because there was one that was expected<
git checkout dev
git merge a
git签出b
git rebase开发
>修复冲突,因为存在预期的冲突<
git签出开发
git合并a
这会造成提交顺序如下的情况:

b1 15h34
a1 15h33
a2 15h35 >dev<
b115h34
a1 15h33
a2 15h35>开发<

此时,如果我想按时间顺序获取历史记录,我必须
重新设置head~4的基址
,以对提交进行重新排序。但这需要用力推遥控器,我想避免


我如何修改我的“git流”,或者我可以使用什么解决方案将我的功能分支重新基础/合并到开发分支中,并保持历史记录的整洁(按时间顺序)?

这里有两个问题:

首先,如何按照您想要的顺序进行提交。正如您所注意到的,您可以使用
rebase-i
在一个分支中完成提交

你所说的问题是,你必须用力推。如果你已经推动了重新基准的结果,那么这是真的;但未来的解决方案是,在推之前执行
rebase-i

这导致了第二个问题:

如果你已经推动了历史,你如何在没有强制推动的情况下修复它?答案是:你不能


顺便说一句,我根本不建议这样做。我理解你认为按时间顺序进行提交是有道理的。当你看历史是如何被实际使用的,它不是;您所做的是通过将相关更改与其他更改组混合来取消分组。

为什么不选择cherry pick?@matt,因为我不知道这一点,我执行的命令越少,团队就越高兴:D@matt我的话有什么变化?我说我不知道,如果可能的话,我希望使用尽可能少的命令。并不是说我不想用它。请不要成为那种修改别人所说的话的人……谢谢,特别是旁注。这和一个大学生对我说的话不谋而合。