我可以使用 Git 以两种方式更改提交历史记录吗?

Fil*_*ppo 1 git commit github git-commit gitlab

我问这个问题是因为我正在研究Pro Git书,有一章“重写历史”,解释了如何更改最后一次提交$ git commit --amend,更改多个提交消息$ git rebase -i HEAD~ 3 、使用$ git filter-branch --tree-filter删除所有提交中的特定文件或文件夹。

我的问题是:这本书没有提到通过沿着所有提交历史进行多次签出来完成这项工作的可能性。所以我移动我的 HEAD,逐个提交,然后用$ git commit --amend一项一项地更改这个特定的提交。

我知道这真的(真的!)就花费的时间而言非常昂贵,但是它真的有可能(即它有效)吗?
如果是,在什么情况下这可能有用?

Von*_*onC 5

对于所有提交,您可以使用newren/git-filter-repo,它可以重写您需要的任何内容(作者、提交消息、文件或文件内容,...)

例如,关于提交消息,使用 message-callback

消息回调与前三个回调非常相似,尽管它对可能不止一行的字节串进行操作:

git-filter-repo --message-callback '
 if b"Signed-off-by:" not in message:
   message += b"\nSigned-off-by: Me My <self@and.eye>"
 return re.sub(b"[Ee]-?[Mm][Aa][Ii][Ll]", b"email", message)'
Run Code Online (Sandbox Code Playgroud)