我最近遇到了一个 Git 问题,导致了一些问题,我正在寻求一些有关如何解决它的建议。情况是这样的:
我正在处理我们的存储库,不小心使用我的个人用户名而不是我的工作帐户推送了提交。为了纠正这个问题,我从 Git 历史记录中删除了提交并重新完成了工作。此时一切看起来都很好 — 提交在 Visual Studio 或 Bitbucket 上不再可见,并且工作仍然按预期完成。
但是,一位小组成员后来推送到了存储库,并以某种方式设法重新引入了之前删除的提交。更糟糕的是,这个提交不再是最新的,并且从那时起又添加了几个分支。它也已合并到主分支中。
我想永久删除此提交,或者至少更改与之关联的用户名和电子邮件,因为它包含个人信息,而且永远保留这样的东西显然不专业。我在 Bitbucket 上看到了this 文章,其中建议使用变基来解决这个问题。然而,我以前从未重新建立过基础,而且我担心可能会破坏任何东西,特别是考虑到分支的数量以及它已合并到主分支中的事实。
我的问题是:此时我可以做些什么来永久删除或编辑此提交,还是我不得不处理它?
任何有关如何处理这种情况的指导或分步说明将不胜感激。预先感谢您的帮助。
我在第一次提交时尝试删除该提交,这很有效,直到一个小组成员推动并以某种方式将其恢复。现在我不知道如何解决这个问题而不可能破坏很多东西。
我知道可能还有其他方法来处理这个问题,但这就是我在不小心推送到 Bitbucket 时所做的,这需要一些跑腿工作,但是,我可以预见地理解精细控制会发生什么:
备份故障分支
git switch -c branch_backup_name
备份分支删除计算机上故障分支的本地版本
git branch -D branch_to_fix
检查错误之前的提交(例如,如果 757c47d4 是您个人帐户之前的提交),并重命名为您正在修复的分支
git checkout 757c47d4
git switch -c branch_to_fix
在Bitbucket中删除服务器上有故障的分支
重新添加您的更改
git add .
git commit -m "Your commit message"
从备份分支中挑选您想要的单个提交(您的其他提交、您同事的提交等)
git cherry-pick 12345678
git cherry-pick ...
将本地分支推送到服务器(可能会要求您根据 git 设置设置上游)
git push
此时,您应该拥有错误的备份分支以及从头开始的新分支。如果您愿意,您可以选择删除备份分支。您的同事需要使用
git branch -D branch_to_fix
在本地删除分支,然后从服务器检出您的新分支。