让git忘记我对文件做了什么

让git忘记我对文件做了什么,git,Git,在我的分支中,有一个文件可能是我不小心更改的,我已经多次提交并重新设置了基础。在我把这个分支交给其他人之前,我想让git忘记我对这个文件做过任何事情 如何让git从主分支获取该文件的最新版本(其他人一直在更新该文件),并忘记我的分支曾经接触过该文件的事实?从主分支签出该文件以覆盖您的更改可能是最简单的。提交刚签出的文件后,您可能希望重新设置分支的基础/挤压分支,以删除对该文件的任何提交。要签出的语法为: git checkout origin/master <path_to_file>

在我的分支中,有一个文件可能是我不小心更改的,我已经多次提交并重新设置了基础。在我把这个分支交给其他人之前,我想让git忘记我对这个文件做过任何事情


如何让git从主分支获取该文件的最新版本(其他人一直在更新该文件),并忘记我的分支曾经接触过该文件的事实?

从主分支签出该文件以覆盖您的更改可能是最简单的。提交刚签出的文件后,您可能希望重新设置分支的基础/挤压分支,以删除对该文件的任何提交。要签出的语法为:

git checkout origin/master <path_to_file>
git签出源/主

更高级的选项可能是使用

当您在分支上时,您可以从
主文件
签出文件:

git checkout master the_file
提交更改,然后找到您意外更改文件的提交的sha1。和使用

git rebase -i that_sha1
您将看到来自分支的提交列表,从最旧到最新。将最后一行(您刚刚进行的修复提交)移动到第一行(不正确的提交)之后,并将
pick
更改为
fixup
。这与修改不正确的提交,然后在此基础上重定其余提交的位置具有相同的效果


这一切都假设您没有发布您的分支。如果你这样做了,而其他人现在也这样做了,你就麻烦了。

这个答案显然更正确,但肖恩的答案要简单得多(对于一个git noob来说),而且似乎已经为我完成了这项工作(git diff——只写名字的‘攻击master’不会再显示有问题的文件,我也不存在于该文件的git Bull中)。。。因为你似乎知道很多git魔术,你能评论一下什么时候(或者为什么)你的答案是更好的吗?如果我正确理解Sean的解决方案,错误的文件将保留在历史记录中,你将有一个提交,将其更改回正确的版本。这是一个合理的做法,但你说你希望看起来你从未对文件做过任何事情。没有重定基址或分支筛选,您无法实现这一点。是的。。所以我重新设定了。。。在我执行主签出并使用所有以前的提交重新设置该文件的基础后,重新设置基础的分支是否还记得更改了该文件,然后又没有更改该文件?这取决于您是否正确地重新设置了该文件的基础。看看历史,自己检查一下。