一个项目,fork 出来,修改了其中一个文件,git commit & push,然后获取上游的更新,并和自己的代码 merge,merge 后我对原来那个文件的修改被合并,变成上游的代码,现在我想把该文件回退到之前我修改并提交的状态,但是我用 git log 查看的时候出现了标题说明的问题…十分不理解… (图里,我是 hyzhang)
项目在这里
认证高级PHP讲师
因为你用了-2呀,然后合并来的上游修改比你的新,所以你自己的修改排在前2之外了。不要用-2,查看完整历史,找到你想恢复的版本,checkout出来再commit就可以。
-2
安装 git extras,然后执行git revert,它会帮你处理所有的事情
试试 git log --pretty=oneline modules.rst
git log --pretty=oneline modules.rst
看到这个界面,我还是要再推荐下 tig
我 clone 了你的库,然后我分别 checkout 到你之前的 commit 上然后创建新的分支,再进行 diff 操作,以下是结果:
clone
checkout
commit
diff
从 fix typo and translation 到 Merge...无 modules.rst 的修改记录
fix typo and translation
Merge...
modules.rst
从 add... 到 fix typo and translation 仍然无 modules.rst 的修改记录
add...
从 fix typo 到 add... 终于出现了 modules.rst 的修改记录
fix typo
所以很明显 git 的 log 记录没有错,你最近的几次 commit 并没有修改 modules.rst 文件,它又怎么会出现在 log 中呢?
git
log
最近的四次 commit 记录:
根据 git diff 的结果,可以确定从 fix typo 到 add... 的这次提交中是对 modules.rst 最近的操作,所以查看 modules.rst 的 log 肯定只显示到 add... 这次 git diff 的结果,可以确定从 fix typo 到 add... 的这次提交中是对 modules.rst 最近的操作,所以查看 modules.rst 的 log 肯定只显示到 add... 这次 commit了。
git diff
输入 git log --merges 命令,显示用于 merge 的 git log --merges 命令,显示用于 merge 的 commit:
git log --merges
merge
发现了吗?与之前的 merge 相比,你这次 merge 是存在 conflict 的,而且这个 conflict 和你的问题文件 modules.rst 还有关,所以我分析这应该就是问题所在,应该是你的文件产生了冲突,但是你没有解决冲突,而又 merge 成功,这些冲突不知道什么原因被忽略,所以它们不会作为 merge 相比,你这次 merge 是存在 conflict 的,而且这个 conflict 和你的问题文件 modules.rst 还有关,所以我分析这应该就是问题所在,应该是你的文件产生了冲突,但是你没有解决冲突,而又 merge 成功,这些冲突不知道什么原因被忽略,所以它们不会作为 commit 的一部分进入 log 的一部分进入 log 的历史记录中。好了,该去休息了,希望答案对题主有帮助。:)
conflict
因为你用了
-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...
这次git diff
的结果,可以确定从fix typo
到add...
的这次提交中是对modules.rst
最近的操作,所以查看modules.rst
的log
肯定只显示到add...
这次commit
了。输入
git log --merges
命令,显示用于merge
的git log --merges
命令,显示用于merge
的commit
:发现了吗?与之前的
merge
相比,你这次merge
是存在conflict
的,而且这个conflict
和你的问题文件modules.rst
还有关,所以我分析这应该就是问题所在,应该是你的文件产生了冲突,但是你没有解决冲突,而又merge
成功,这些冲突不知道什么原因被忽略,所以它们不会作为merge
相比,你这次merge
是存在conflict
的,而且这个conflict
和你的问题文件modules.rst
还有关,所以我分析这应该就是问题所在,应该是你的文件产生了冲突,但是你没有解决冲突,而又merge
成功,这些冲突不知道什么原因被忽略,所以它们不会作为commit
的一部分进入log
的一部分进入log
的历史记录中。好了,该去休息了,希望答案对题主有帮助。:)