[在模块之间移动功能时保留Git提交消息的顺序

问题描述 投票:0回答:1

我在我的项目的专用模块中组织了功能和类。我使用PyCharm在Python中进行编码。

我经常需要对项目中的模块进行重组。

使用Git,在将功能从一个模块移动到另一个模块时,如何保留所有提交消息?显然,它不会自动发生(ref on intellj)。


我想出了这种解决方法:

  • 因为我可以看到模块内部单个功能的历史(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,但如果通过命令行将其移至my_newfile,则同样适用)

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

虽然不好,但是比丢失整个提交历史要好。

任何建议都值得赞赏。

git pycharm commit
1个回答
0
投票

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

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

人们通常的意思是:

我重命名了一些文件,现在找不到了。

这并不奇怪,因为每个Git提交只是所有文件的快照。提交A具有文件README.txtstarter.py,最后提交Z具有README.rstalldone.py。如果README.rst是沿途某处的重命名(也许还进行了修改),那么,唯一的<< find >>方法就是Git可以走,一次提交,即从Z回到[ C0]返回到Y,直到某个时候(例如XM之间)比较两个提交的内容表明,[[wha-hey,N中的README.txt是一个M中的README.rst非常糟糕,因此我们称<< rename >>并停止寻找N并开始寻找README.rst。这就是README.txt所做的。如果直接从git log --follow跳到Z,则两个文件的内容可能相差太大,无法匹配它们。但这就Git而言还可以:如果您问我如何编辑A中的文件以使其看起来像A]中的文件,Git会说,删除Z并使用以下内容创建新的README.txt

这些指令起作用

。他们没有告诉您您想知道的内容,但是就Git而言,它们足够好。
将功能从一个文件移动到另一个文件时,Git的某些部分,包括README.rst,可以进行逐个提交的比较,在较早的提交中搜索all文件,然后找到它(对于[ C0],则需要git blame选项,而git blame-C。 Git的其他部分,包括直接将较早的提交与较晚的提交进行区分,通常是不行的:比较任何一对提交时,对于--follow / git log选项,重命名的文件必须与原始文件足够相似。工作。您可以调整重命名查找阈值:-M在没有任何阈值的情况下打开时,使用50%的相似性索引,即,两次调用中文件的大约一半必须相同,Git才能调用重命名操作。但是,此重命名检测还需要满足其他几个条件。通常,将功能从一个现有文件移动到另一个现有文件将导致其失败。对于--find-renames,有时也可以使用-M(中断配对标志,该标志最多包含两个相似性索引值),但是此操作的用度很快下降。
© www.soinside.com 2019 - 2024. All rights reserved.