你能从旧的提交中恢复单个文件吗? (Git, 比特桶)

Can you revert a single file from an old commit? (Git, bitbucket)

我最近在 Bitbucket 上创建的 PR 有问题。我不小心复制粘贴了文件的内容,整个内容看起来都是我写的,这破坏了 Git 历史,这很重要。此提交被推送,之后又进行了几次提交,因此撤消提交不是这里的解决方案,因为每个提交都有很多更改。

我想知道是否有办法从旧提交中仅恢复旧文件,仅进行必要的更改并提交此特定文件。

我已经阅读了一些关于它的文章,但还没有想出一个安全的解决方案。

提前谢谢你:)

我首选的部分还原方法是:

git revert --no-commit <commid-id-to-revert>

此时,该还原的更改将全部上演。您可以取消暂存任何您不想还原的文件,以及 modify/re-stage 任何您希望调整的文件。 (在您的特定情况下,您将取消暂存所有文件,但要还原的文件除外。)请注意,您可能会遇到冲突。对于您不想还原的文件上的任何冲突,您可以只“保持最新”,但对于那些您希望保留的文件上的冲突,您需要像往常一样解决它们。

完成更改后,继续从命令行还原,因此提交消息为 auto-populated:

git revert --continue

提示:默认情况下,当您还原提交时,提交消息将类似于:

Revert "Title of commit message being reverted"

This reverts commit <some-commit-id-here>.

我的建议是更改该消息,特别是针对 部分 还原,更改为如下内容:

Revert (Partial) "Title of commit message being reverted"

This (partially) reverts commit <some-commit-id-here>.

A custom explanation of which parts of the commit are being reverted,
and why.