我想在主分支上重新绑定一个分支,但是这样一来,所有提交都会在git日志中按时间顺序显示.这可能没有git rebase --interactive并手动重新安排提交吗?
背景:我使用git来跟踪服务器场的puppet配置.主分支始终处于已知良好状态,因此所有现有服务器都可以从puppet主服务器检索其配置.
每个新服务器都有自己的分支,因此每当我处理新服务器的配置时,例如更改域名,配置SSL证书,我都会检查其分支并提交所有配置.
新配置完成后,我将更改重新绑定到主分支:
# git checkout new_config
Switched to branch 'new_config'
# git rebase master
First, rewinding head to replay your work on top of it...
Applying: fix routing rules
Applying: fix netmask
Applying: configure new ip address
# git checkout master
Switched to branch 'master'
# git merge new_config
Updating 21a3120..b0b79d7
Fast-forward
files/custom/xxxx | 45 +++++++++++++++++++++++++++++++++++++++++++++
files/custom/yyyy | 38 --------------------------------------
manifests/site.pp | 6 +++---
3 files changed, 48 insertions(+), 41 deletions(-)
#
Run Code Online (Sandbox Code Playgroud)
新提交现在位于日志之上,但它们具有原始(过去)日期.它看起来像这样:
commit b0b79d7924ec97e367664ccc26aaf0021916a30d
Author:
Date: Sun Jul 12 17:14:41 2015 +0200
configure new ip address
commit f60d00abd57d6b8582f49bf1322efb88d44ee86e
Author:
Date: Fri Jul 10 13:19:45 2015 +0200
fix netmask
commit 6eaae6c328faf55e5725f65a947bbb23ea29b166
Author:
Date: Fri Jun 12 14:05:25 2015 +0200
fix routing rules
commit 21a31200e6694c640b2cb526d773af11cd703ff1
Author:
Date: Wed Jul 15 15:08:41 2015 +0200
(most recent commit on master before rebase)
commit a7fa9cfa9c317fbbeb7dac8a89009c7d935fdd11
Author:
Date: Wed Jul 15 11:56:59 2015 +0200
(second most recent commit on master)
Run Code Online (Sandbox Code Playgroud)
请注意分支提交的旧时间戳如何显示在日志的顶部,而不是根据其提交日期在日志中进一步合并.我必须运行另一个git rebase --interactive来重新排列提交,以便我的日志文件按时间顺序显示所有提交.
你的问题有点不明确,因为git log总是对其输出进行排序,但它需要选项告诉它如何排序:
提交订单
默认情况下,提交按时间倒序显示。
--date-order在显示所有子项之前不显示父项,但否则按提交时间戳顺序显示提交。
--author-date-order在显示所有子项之前不显示父项,但否则按作者时间戳顺序显示提交。
--topo-order在显示所有子项之前不显示父项,并避免显示混合的多行历史记录上的提交。
因此,在没有选项的情况下,git log无论如何都会按时间顺序显示提交。
我认为您要问的是如何更改重新调整的提交上的时间戳。默认情况下,变基会保留时间戳。
请注意,每次提交都有两个时间戳:作者日期和提交者日期。
rebase 文档描述了这两个选项:
--committer-date-is-author-date,--ignore-date传递这些标志可以
git am轻松更改重新基址提交的日期(请参阅 git-am(1))。与该--interactive选项不兼容。
查阅git am文档可以更好地描述这些内容:
--committer-date-is-author-date默认情况下,该命令将电子邮件中的日期记录为提交作者日期,并使用提交创建时间作为提交者日期。这允许用户通过使用与作者日期相同的值来谎报提交者日期。
--ignore-date默认情况下,该命令将电子邮件中的日期记录为提交作者日期,并使用提交创建时间作为提交者日期。这允许用户通过使用与提交者日期相同的值来谎报作者日期。
fuller您可以使用带有 的格式查看作者和提交者日期git log,例如 ( git log --format=fuller)。
我相信您想要使用--ignore-date,这使得每个重新基准提交“从现在开始”发生(这假设我正确解释了您的问题!)。