我要撤销一个有问题的提交,但是在撤销之后,如果我在文件上运行git blame,我会看到我的撤销被视为最近触及这些行的提交。这很合理,但不是很有用,因为我想看到原始文件的git历史记录。(即就像有问题的提交和撤销从未发生过一样)。
有没有办法做到这一点?
谢谢!
有没有办法做到这一点?
谢谢!
git-blame
忽略原始提交或回滚(除非你愿意改变历史记录,在这种情况下,你实际上并没有回滚任何东西)。git-blame
注释文件的先前版本。$ git blame HEAD -- foo.c
并看到:
7507efdad27 foo.c (amalloy) ...
在您感兴趣的行上。您决定此提交不是有用的,因为它是一个还原操作。您可以使用 git show 7507efdad27
检查该提交所还原的提交。
假设这产生了 673bdae7548
:然后您可以在该提交之前要求对文件进行责任视图:
$ git blame 673bdae7548^ -- foo.c
这将向您显示在撤销提交之前的责任,因此您感兴趣的行将带有最后一次触及它们的提交的注释,在被撤销的提交之前。
从还原的父级运行你的责备,参阅git blame文档;你甚至可以指定一个感兴趣的检查提交的显式列表,并从普通的rev-list输出中删除还原。
如果您不想编辑您的历史记录,也不介意多提交一次,则可以通过以下方式实现:
如果您指责新分支,您现在应该可以看到被还原行的原始作者。
顺便提一下,理论上如果你将你的分支合并到主分支时不使用快进模式,这个过程应该会自动发生,从而使得这个步骤变得不必要。
我没有测试过,如果您从已合并到主分支的旧分支中恢复某个内容,所有这些内容如何工作。 我的猜测是,您需要在第2步中创建一个来自于未包含应该被撤消更改的主分支版本的分支。也许会奏效¯\(ツ)/¯。
git cherry-pick branch-name~4 # (this is a keeper)
git cherry-pick branch-name~3..branch-name # apply revisions after branch-name~3
看,这根本就没发生过。在你的情况下,在挑选时排除还原修订版本就可以了。