【问题标题】:git log --follow filename does not show commit changed that filegit log --follow 文件名不显示提交更改了该文件
【发布时间】:2012-08-03 12:32:18
【问题描述】:

我做了什么:

  • 从 master 创建了开发分支;
  • 修改了几个文件并提交;
  • 使用--no-commit参数将开发分支合并到master;
  • 在开发分支中修改的几个文件上运行git reset --hard。结果主分支只包含开发分支中的几个对象——即我已经部分合并了开发更改;
  • 我已在 master 中提交更改;
  • 一段时间后,其他开发人员更新了 master 分支,为了更新我的开发分支,我将 master 分支合并到其中。

我已经准备好,我在之前的合并中没有提交到 master 的开发对象将被 master 中的文件覆盖。但是在git log --follow dev-modified-file.txt 的输出中,我看不到覆盖我的开发更改的提交。

在我的开发分支上运行git log --follow dev-modified-file.txt,我可以看到需要的提交以及开发修改。但看不到提交恢复该更改(实际上没有这样的提交),但我的工作树包含dev-modified-file.txt 文件的主版本,尽管有提交添加开发代码,但没有提交删除该代码。

为什么?

主分支的代码是如何潜入我的开发分支的?

附:如果我的描述不清楚,请在 cmets 中提问,我将很乐意对此帖子进行解释和更正。

编辑: 将我的主分支合并到开发分支后,我看不到主分支和开发分支之间的区别(我省略的更改消失了!)并且我没有看到在开发分支中提交负责!

我相信这可能与合并策略有关...但是如何?你看,我登录开发分支的样子:

  • 我已向文件添加更改 — 工作文件夹中的文件包含更改。
  • 我已将 master 分支合并到开发分支中 - 大量提交来到了开发分支,我编辑的文件在 master 分支中变成了一个相同的文件,尽管没有提交负责!

我在合并后对文件添加了更改,这些更改消失了,没有留下任何痕迹!

【问题讨论】:

  • 当您没有看到“没有提交删除该代码”或在开发分支上时,您现在在 master 上? IE。是在master 上看不到开发分支的合并更改,还是在开发分支上意外看到master 的版本?
  • 在开发分支上。开发分支是引入所有更改的地方。在合并到 master 期间,我仅部分应用了这些更改。并且省略的更改仅在开发分支中。没关系,我没有在 master 上看到它们——我没有故意提交它们。但是在将我的 master 合并到 development 之后,我看不到 master 和 development 分支之间的区别(我省略的更改消失了!)而且我没有看到 commit 对此负责!
  • 我敢打赌“将我的主人合并到开发中”提交。试试git diff <merge_commit>~1 <merge_commit>,看看它做了什么改变。

标签: git version-control merge git-merge git-log


【解决方案1】:

由于git log <filename> 在其默认模式下执行的历史简化,您很有可能看不到您正在寻找的更改。这种简化使得git log <filename> 对于查找删除内容的提交不是很有用。

尝试改用git log --follow --simplify-merges dev-modified-file.txt;这改变了历史简化算法,使其在简化您可能关心的更改方面不那么激进。如果历史记录足够短,并且您安装了 gitk,您也许可以浏览历史记录以找到您要查找的内容:gitk --simplify-merges dev-modified-file.txt

【讨论】:

    猜你喜欢
    • 2015-04-02
    • 2018-03-11
    • 1970-01-01
    • 2012-06-05
    • 2021-02-24
    • 2012-12-21
    • 2021-07-12
    • 2021-04-29
    • 2017-07-11
    相关资源
    最近更新 更多