我经常使用amend
和rebase
,因为我会进行小的提交,并且通常在最后对它们进行分组(读作:squash
(,以获得连贯的(就像在nice中一样(历史。
话虽如此,对于给定分支中的每个提交,我希望从作者和提交者获得相同的信息,所以我想知道是否有办法做到这一点"原生地";使用Git。
基本上,我要找的是:
- 从分支中获取所有提交(与
master
相比(,例如:git rev-list master..HEAD
- 从给定提交中检索作者的日期(例如:
git log --format=%aD --no-walk
(并应用更改
这样,提交人的信息与作者的信息相同——因为除了日期之外,我的情况没有其他变化。
我知道可以交互地完成这项工作,但我想知道是否有一个Git-fu命令可以让我做这样的事情。
Filter分支为您运行的过滤器提供标准实用程序函数(来自libexec/git-core/git-sh-setup
(,因此
git filter-branch
--setup 'eval `get_author_ident_from_commit thatcommit`
targetname=$GIT_AUTHOR_NAME
targetemail=$GIT_AUTHOR_EMAIL
'
--env-filter '
GIT_AUTHOR_NAME=$targetname
GIT_AUTHOR_EMAIL=$targetemail
GIT_COMMITTER_NAME=$targetname
GIT_COMMITTER_EMAIL=$targetemail
'
--tag-name-filter cat
-- master..
要用皮带和吊带做到这一点,可以在一个划痕克隆中进行:
git clone -ns --mirror . `mktemp -d`; cd $_
# the above filter-branch
# if everything looks good,
git push origin HEAD
cd -