我读过各种git
没有明确跟踪重命名/移动的常见问题解答,更喜欢寻找相同的(或在某些情况下类似的?)文件。太好了,但它会应付这种情况吗:朋友的远程存储库有一个新功能(i18n),其中涉及debian/po/*.po
. 我有我自己的这个项目的分支,并且想合并这个功能,但把文件放在刚才po/*.po
(我可以做两次提交,或者任何必要的)。我希望远程仓库将继续接收该功能的更新,我只想合并/挑选这些提交并将它们应用于我新位置的文件。可以git
做到这一点,也许是“这些文件现在已经移到这里”的某种映射?还是比它更痛苦'debian
我的仓库中的路径?
3 回答
使用git mv
,一切都会好的。
为什么不直接尝试而不是询问?您可以随时在 git 中轻松重置。:)
Git 缺乏一种机制来表明您希望在进行两个项目/分支等之间的差异时会有路径重命名和更新。
有各种可用的文件重命名选项(例如 -M 和 --patience),但速度可能很慢。
如前所述,路径重命名不会影响存储库本身,因为它只是您的内容(blob)和结构(树节点)的快照。如果您所做的只是添加了一个额外的顶级目录,那么下面的所有树和 blob 都不会改变,并且需要零额外存储。您只需要一个用于提交的树节点和一个用于新 tld 的树节点。容易死。Git 处理那部分没有问题。
只有当您想要进行比较(和任何补丁)时才重要。最好有一个-P
选项表明您期望一些路径重命名,diff
从而轻松应对。看到 200 个文件删除和 200 个新文件并不好;-)
找出如何添加 -P 选项是我的另一个“待办事项”列表项(我希望我能抽出一些时间)。
或者,使用 重命名文件mv
,并调用git add --all
以暂存所有删除操作并添加未跟踪的文件(新文件名)。如果没有--all
,您必须分别明确地暂存删除操作和新文件名。也不要使用git add --update
,因为这将暂存所有删除操作,但不会添加新文件名。
请注意,您可能希望在本地分支中执行这些操作,这样您就不会无意中push
将它们发送到您朋友的主分支,或者您的朋友不会将pull
它们放入他的主分支。