将给定分支上的提交重置为作者信息(电子邮件、日期等)



我经常使用amendrebase,因为我会进行小的提交,并且通常在最后对它们进行分组(读作: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 -

相关内容

最新更新