PHP Manual
/
来自实践的经验

在Git中改变提交所有权

08. 03. 2022

在不同组织之间迁移存储库时,经常会发生我们需要覆盖提交所有者的情况。其原因可能是将提交从一个账户转移到另一个账户,例如,因为用户的电子邮件地址发生了变化。

例如,我需要将我在List上的旧电子邮件账户的所有提交内容转移到我的第二个Gmail账户。第二种情况是,我可能会要求进行这样的修改,即我不小心在一个私人邮箱下提交,但某家公司希望在他们的域名下提交。

幸运的是,有一个命令可以解决这个问题,我可以直接在项目主程序中调用这个命令来覆盖整个历史。

git filter-branch --env-filter "
if [ \"\$GIT_COMMITTER_EMAIL\" = \"janbarasek@seznam.cz\" ]
then
export GIT_COMMITTER_NAME=\"Jan Barášek\"
export GIT_COMMITTER_EMAIL=\"janbarasek@gmail.com\"
fi
if [ \"\$GIT_AUTHOR_EMAIL\" = \"janbarasek@seznam.cz\" ]
then
export GIT_AUTHOR_NAME=\"Jan Barášek\"
export GIT_AUTHOR_EMAIL=\"janbarasek@gmail.com\"
fi
" $@ --tag-name-filter cat -- --branches --tags

命令执行后,需要用git push -f命令将修改的内容冲到主站。

警告:

命令执行后,整个提交历史被覆盖,哈希值被改变。这是BC省的一个突破,只应很少发生。如果你在覆盖提交时犯了错误,就不能恢复历史。同时,你必须删除或覆盖所有分支,否则所有更改的提交都会产生冲突,解决时将会被重复写入(原始提交和新提交)。

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
5.
Status:
All systems normal.
2024