一个项目,fork 出来,修改了其中一个文件,git commit & push,然后获取上游的更新,并和自己的代码 merge,merge 后我对原来那个文件的修改被合并,变成上游的代码,现在我想把该文件回退到之前我修改并提交的状态,但是我用 git log 查看的时候出现了标题说明的问题…十分不理解…
(图里,我是 hyzhang)
项目在这里
一个项目,fork 出来,修改了其中一个文件,git commit & push,然后获取上游的更新,并和自己的代码 merge,merge 后我对原来那个文件的修改被合并,变成上游的代码,现在我想把该文件回退到之前我修改并提交的状态,但是我用 git log 查看的时候出现了标题说明的问题…十分不理解…
(图里,我是 hyzhang)
项目在这里
因为你用了-2
呀,然后合并来的上游修改比你的新,所以你自己的修改排在前2之外了。不要用-2
,查看完整历史,找到你想恢复的版本,checkout出来再commit就可以。
5 回答2.9k 阅读
3 回答2.7k 阅读
3 回答1k 阅读
2 回答263 阅读✓ 已解决
438 阅读
试试
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
的历史记录中。好了,该去休息了,希望答案对题主有帮助。:)