显然,当发生变基时,提交者信息可能会更改。如何在变基时保留提交者信息(user.name、user.email)最好的方法是什么?
我已经尝试使用git log -1 --format="%cn
和git log -1 --format=%ce
获取提交者信息,然后将其设置为我的user.name/user.email并进行变基。这样应该足够了,对吗?还是我漏掉了什么?
看起来情况是这样的:无论出于意外还是设计,如果您想保留提交中的所有三个GIT_COMMITTER环境变量,则git rebase不是答案,请改用git filter-branch(这似乎允许您完全重写提交,只更改提交中提到的一个事项)。不幸的是,这不如git rebase -i那么容易。
在我的情况下,我正在尝试从分支历史记录中删除特定的提交或重新排序提交。
你可以先像平常一样进行rebase,然后在第二次运行时使用git filter-repo将每个提交的提交者设置为该提交的作者:
git filter-repo --commit-callback '
commit.committer_name = commit.author_name;
commit.committer_email = commit.author_email;'
虽然这种方法不被鼓励且比git filter-repo慢得多,但也可以使用git filter-branch来完成此任务:
git filter-branch --commit-filter '
GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME";
GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL";
git commit-tree "$@"' HEAD
git filter-repo
命令是应用于分支上的所有提交还是只应用于最近由rebase操作影响的提交?如果是全部提交,如何将其限制在一个范围commit_hash..HEAD
内? - undefined--refs commit_hash..HEAD
选项来限制提交范围。 - undefinedGIT_COMMITTER_NAME
和 GIT_COMMITTER_EMAIL
,但我不确定你是否能够在重新设置基础期间轻松地逐个设置这些变量。