保留已移动函数的提交消息

时间:2018-11-29 17:20:17

标签: git pycharm commit

进行数据分析时,我总是创建多个功能,这些功能会组织在专用模块中以进行特定的分析。我使用PyCharm在python中进行编码。 经过一些代码迭代之后,这些功能中的一些功能然后可以移至更多的“通用”模块,以便以后可以用于其他分析。

保留提交历史记录确实很有用,但是当将功能从一个模块移动到另一个模块(ref on intellj,)时,git显然不会保留提交历史记录,PyCharm也对此不提供任何帮助。

我想出了以下解决方法:

  • 因为我可以看到模块内单个功能的历史记录(ref on stackoverflow),所以我在终端中发出以下命令:

    git log -L:myfunction:path / to / myfile.py --follow path / to / myfile.py >> myfunction_commit_history.txt

  • 我将myfunction移至my_newfile(使用PyCharm GUI,但是如果通过命令行将其移至同样的情况)

  • 我从myfunction_commit_history文件中复制提交历史记录

这不是很好,但是比失去整个提交历史更好。

高度赞赏任何建议/改进/更好的方式。

1 个答案:

答案 0 :(得分:0)

Git中的保存提交历史记录这个短语是胡说八道。

原因是提交 are 历史记录; 历史什么都不是。您要么拥有提交,那么所有内容都被保留,或者您没有,因此没有。

人们通常的意思是:我重命名了一些文件,但现在找不到了。这并不奇怪,因为每次Git提交只是所有文件的快照。提交A具有文件README.txtstarter.py,最后提交Z具有README.rstalldone.py。如果README.rst是沿途某处的重命名(也许还进行了修改),那么,唯一找到 的方法就是让Git从{ {1}}返回Z返回Y直到某个时刻(例如介于XM之间)比较两次提交的内容表明, wha-hey N中的README.txtM中的README.rst非常相似,因此我们称其为重命名并停止寻找N,而开始寻找README.rst。这就是README.txt的作用。

如果直接从git log --follow跳到Z,则两个文件的内容可能相差太大而无法匹配。但这就 Git 而言还可以:如果您问我如何编辑A中的文件,使它们看起来像A中的文件,Git会说,删除Z并使用这些内容创建新的README.txt 这些说明有效。他们没有告诉您您想知道的内容,但是就Git而言,他们已经足够好了。

将功能从一个文件移动到另一个文件时,Git的某些部分(包括README.rst)可以进行逐个提交的比较,在早期提交中搜索 all 个文件,并找到它(对于git blame,您需要git blame选项,而-C--follow的选项)。 Git的其他部分,包括直接将早期提交与后期提交进行区分,通常是不行的:比较任何一对提交时,重命名的文件必须与git log / {{1 }}选项起作用。您可以 调整重命名查找阈值:-M在没有任何阈值的情况下使用50%的相似度索引,即,两个文件中大约一半必须相同承诺让Git调用重命名操作。但是,此重命名检测还需要满足其他几个条件。通常,将功能从一个现有文件移动到另一个现有文件将导致其失败。对于--find-renames,有时也可以使用-M(break-pairings标志,该标志最多占用两个相似性索引值),但是这种用法的用度很快下降。