Ada*_*dam 2 git version-control
我在 github.com 上开始了一些项目。我正在两台机器上工作。我做了这样的事情:
第二天我在 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)
但看起来获取提交者信息仍然是可能的。如何永久删除它。
此致,
亚当
如果您只想更改提交者信息,您可以使用git rebase
which 获取您的提交并在另一个提交之上重放它们。该--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 来重写存储库中的所有提交
注意:如果您已经共享了您的存储库,并且您必须在要使用它的每台机器上重新克隆它,那么这是一件坏事。