我想重命名/移动Git中的项目子树
/project/xyz
to
/components/xyz
如果我使用普通的gitmv项目组件,那么xyz项目的所有提交历史都会丢失。有没有一种方法可以移动它,以保持历史?
我想重命名/移动Git中的项目子树
/project/xyz
to
/components/xyz
如果我使用普通的gitmv项目组件,那么xyz项目的所有提交历史都会丢失。有没有一种方法可以移动它,以保持历史?
当前回答
首先,只需重命名即可创建独立提交。
然后,对文件内容的任何最终更改都将放在单独的提交中。
其他回答
要重命名目录或文件(我不太了解复杂的情况,因此可能需要注意):
git filter-repo --path-rename OLD_NAME:NEW_NAME
要在提到目录的文件中重命名目录(可以使用回调,但我不知道如何):
git filter-repo --replace-text expressions.txt
expressions.txt是一个充满了文字:OLD_NAME==>NEW_NAME等行的文件(可以将Python的RE与regex一起使用,也可以将glob与glob一起使用)。
要重命名提交消息中的目录,请执行以下操作:
git-filter-repo --message-callback 'return message.replace(b"OLD_NAME", b"NEW_NAME")'
Python的正则表达式也受支持,但必须用Python手动编写。
如果存储库是原始的,没有远程,则必须添加--force以强制重写。(在执行此操作之前,您可能需要创建存储库的备份。)
如果不想保留引用(它们将显示在GitGUI的分支历史记录中),则必须添加--replace-refs delete no add。
首先,只需重命名即可创建独立提交。
然后,对文件内容的任何最终更改都将放在单独的提交中。
git log --follow [file]
将通过重命名向您展示历史。
Git检测重命名,而不是通过提交持久化操作,因此使用gitmv还是mv并不重要。
log命令采用--follow参数,该参数在重命名操作之前继续历史,即,它使用启发式搜索类似的内容。
要查找完整的历史记录,请使用以下命令:
git log --follow ./path/to/file
我愿意:
git mv {old} {new}
git add -u {new}