Git删除提交者信息

时间:2011-08-10 15:07:36

标签: git version-control

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

  1. 在github上创建项目,
  2. 在Machine1上克隆项目形式github,
  3. 在Machine1上做了一些提交,
  4. 在Machine2上创建了reposytory,
  5. 将更改从Machine1推送到Machine2和github。
  6. 第二天,我在使用Machine2。我有不同的配置,所以我做了提交“--author = something”param。完成工作后,我将更改推送到Machine1。

    我将我的更改从Machine1推送到github。我可以看到在Machine1上完成的提交已经在历史记录中提交了作者,这是正确的,还提交了来自Machine1的Committer。而且我不想公开提交这个提交者。我该如何删除它?

    暂时我在Machine1上做了:

    git reset --hard <commit before changes on Machine1>
    git push -f github master
    

    但看起来仍然可以获得提交者信息。如何永久删除它。

    致以最诚挚的问候,

    亚当

1 个答案:

答案 0 :(得分:4)

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

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>

当您的历史记录稍微复杂(合并)时,这将很快变得棘手,在这种情况下,使用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

您也可以使用--all代替refspec来重写存储库中的所有提交

nb:如果你已经共享了你的存储库,这是一件坏事,你必须在你想要使用它的每台机器上重新克隆它。