如何将两个分支重新设置为一个分支,以便按创建时间对提交进行排序?
示例情况:
* cf28348 (HEAD -> master) g [2019-01-07]
* 2613a13 d [2019-01-04]
| * 887ba70 (feature) f [2019-01-06]
| * 96c6abf e [2019-01-05]
| * 909eee5 c [2019-01-03]
|/
* ed32245 b [2019-01-02]
* 645aaf9 a [2019-01-01]
所需结果(省略了哈希):
* (HEAD -> master) g [2019-01-07]
* f [2019-01-06]
* e [2019-01-05]
* d [2019-01-04]
* c [2019-01-03]
* b [2019-01-02]
* a [2019-01-01]
答案 0 :(得分:0)
您可以使用两个连续的变基操作来执行此操作,但是严重的缺点是结果最终不会成为master
或feature
分支的子代:它将分支到重新排列提交的第一个地方。这也意味着您必须使用push -f
来推动此更改,这可能不会使您的团队感到满意。
如果您不介意该警告,请尝试:
MERGE_BASE=`git merge-base master feature`
git rebase master
git rebase -i $MERGE_BASE
然后,您将必须手动订购提交:
pick 0a95943 c
pick 7e0c4a3 d
pick 57b52d2 e
pick 84a23b7 f
pick 0ad6b79 g
在rebase窗口中,您将看不到日期,因此我将在并行窗口中运行此命令以提供帮助:
git log --graph --decorate --author-date-order master feature
我在评论中看到您想要一个非交互式解决方案:如果您想进一步自动化,您可以为添加到git log
的{{1}}命令的输出编写一个解析器。提取要按正确顺序选择的提交,但是--pretty=oneline
似乎没有任何选择。
实际上,此log命令将更易于解析:
rebase
这是一个最小的解析器,它可以生成您需要提供给交互式资源库的内容:
git log --pretty=oneline --author-date-order $BASE..feature $BASE..master