一个项目,fork 出来,修改了其中一个文件,git commit & push,然后获取上游的更新,并和自己的代码 merge,merge 后我对原来那个文件的修改被合并,变成上游的代码,现在我想把该文件回退到之前我修改并提交的状态,但是我用 git log 查看的时候出现了标题说明的问题…十分不理解…
(图里,我是 hyzhang)


项目在这里
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
因为你用了
-2呀,然后合并来的上游修改比你的新,所以你自己的修改排在前2之外了。不要用-2,查看完整历史,找到你想恢复的版本,checkout出来再commit就可以。安装 git extras,然后执行git revert,它会帮你处理所有的事情
试试
git log --pretty=oneline modules.rst看到这个界面,我还是要再推荐下 tig
我
clone了你的库,然后我分别checkout到你之前的commit上然后创建新的分支,再进行diff操作,以下是结果:从
fix typo and translation到Merge...无modules.rst的修改记录从
add...到fix typo and translation仍然无modules.rst的修改记录从
fix typo到add...终于出现了modules.rst的修改记录所以很明显
git的log记录没有错,你最近的几次commit并没有修改modules.rst文件,它又怎么会出现在log中呢?最近的四次

commit记录:根据
git diff的结果,可以确定从fix typo到add...的这次提交中是对modules.rst最近的操作,所以查看modules.rst的log肯定只显示到add...这次commit了。输入
git log --merges命令,显示用于merge的commit:发现了吗?与之前的
merge相比,你这次merge是存在conflict的,而且这个conflict和你的问题文件modules.rst还有关,所以我分析这应该就是问题所在,应该是你的文件产生了冲突,但是你没有解决冲突,而又merge成功,这些冲突不知道什么原因被忽略,所以它们不会作为commit的一部分进入log的历史记录中。好了,该去休息了,希望答案对题主有帮助。:)