Git 删除提交者信息

Ada*_*dam 2 git version-control

我在 github.com 上开始了一些项目。我正在两台机器上工作。我做了这样的事情:

  1. 在github上创建项目,
  2. 在 Machine1 上从 github 克隆项目,
  3. 在 Machine1 上做了一些提交,
  4. 在 Machine2 上创建了存储库,
  5. 将更改从 Machine1 推送到 Machine2 和 github。

第二天我在 Machine2 上工作。我在那里有不同的配置,所以我正在使用“--author=something”参数进行提交。完成工作后,我将更改推送到 Machine1。

我将我的更改从 Machine1 推送到 github。我可以看到在 Machine1 上完成的提交在历史记录中提交了正确的 Author 和来自 Machine1 的提交者提交。我不想公开这个提交者提交的文件。我怎样才能删除它?

暂时我在 Machine1 上做了:

git reset --hard <commit before changes on Machine1>
git push -f github master
Run Code Online (Sandbox Code Playgroud)

但看起来获取提交者信息仍然是可能的。如何永久删除它。

此致,

亚当

kni*_*ttl 5

如果您只想更改提交者信息,您可以使用git rebasewhich 获取您的提交并在另一个提交之上重放它们。该--no-ff选项在这里很重要,因为它确保将重新创建每个提交。否则 git 会快进,以防 rebase 是空操作。

GIT_COMMITTER_NAME=Adam;
GIT_COMMITTER_EMAIL=adam@example.com;
export GIT_COMMITTER_NAME;
export GIT_COMMITTER_EMAIL;
git rebase --no-ff <commit before changes on Machine1>
Run Code Online (Sandbox Code Playgroud)

当您的历史记录更复杂(合并)时,这将很快变得棘手,在这种情况下,最好使用 filter-branch。

如果您也想更改作者信息,利用git filter-branch并重写所有提交的用--env-filter。一定要有备份,以防我的命令有缺陷;)——尽管我不希望如此

git filter-branch --env-filter '
GIT_AUTHOR_NAME=Adam;
GIT_AUTHOR_EMAIL=adam@example.com;
export GIT_AUTHOR_NAME;
export GIT_AUTHOR_EMAIL;

git commit-tree "$@";
' <commit before changes on Machine1>..HEAD
Run Code Online (Sandbox Code Playgroud)

您还可以使用--all而不是 refspec 来重写存储库中的所有提交

注意:如果您已经共享了您的存储库,并且您必须在要使用它的每台机器上重新克隆它,那么这是一件坏事。