suchen

Heim  >  Fragen und Antworten  >  Hauptteil

github - 修改一个文件并提交,整个项目的git log是有该次提交记录的,但是那个文件的git log没有提交记录

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

项目在这里

PHP中文网PHP中文网2798 Tage vor968

Antworte allen(3)Ich werde antworten

  • 習慣沉默

    習慣沉默2017-04-24 16:02:42

    因为你用了-2呀,然后合并来的上游修改比你的新,所以你自己的修改排在前2之外了。不要用-2,查看完整历史,找到你想恢复的版本,checkout出来再commit就可以。

    Antwort
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-04-24 16:02:42

    安装 git extras,然后执行git revert,它会帮你处理所有的事情

    Antwort
    0
  • 黄舟

    黄舟2017-04-24 16:02:42

    试试 git log --pretty=oneline modules.rst

    看到这个界面,我还是要再推荐下 tig

    clone 了你的库,然后我分别 checkout 到你之前的 commit 上然后创建新的分支,再进行 diff 操作,以下是结果:

    fix typo and translationMerge...modules.rst 的修改记录

    add...fix typo and translation 仍然无 modules.rst 的修改记录

    fix typoadd... 终于出现了 modules.rst 的修改记录

    所以很明显 gitlog 记录没有错,你最近的几次 commit 并没有修改 modules.rst 文件,它又怎么会出现在 log 中呢?

    最近的四次 commit 记录:

    根据 git diff 的结果,可以确定从 fix typoadd... 的这次提交中是对 modules.rst 最近的操作,所以查看 modules.rstlog 肯定只显示到 add... 这次 commit了。

    输入 git log --merges 命令,显示用于 mergecommit

    发现了吗?与之前的 merge 相比,你这次 merge 是存在 conflict 的,而且这个 conflict 和你的问题文件 modules.rst 还有关,所以我分析这应该就是问题所在,应该是你的文件产生了冲突,但是你没有解决冲突,而又 merge 成功,这些冲突不知道什么原因被忽略,所以它们不会作为 commit 的一部分进入 log 的历史记录中。好了,该去休息了,希望答案对题主有帮助。:)

    Antwort
    0
  • StornierenAntwort