我知道有“很多”现有问题看起来很相似,所以让我在问我的问题之前总结一下它们。
- 答案是是否可以在 git 中移动/重命名文件并保留其历史记录? https://stackoverflow.com/questions/2314652/is-it-possible-to-move-rename-files-in-git-and-maintain-their-history是,“这是不可能的”。
- 结论为git 移动文件同时保留历史记录 https://stackoverflow.com/questions/24147248/git-moving-file-while-keeping-history是,Gitmay将其视为一个举动,或者可能仍然将其视为删除+添加。
对于第一个答案,我不同意,因为我以前也这么做过。第二个问题的答案就是我问这个问题的原因。 IE。,
我发现我在做git mv
一直如此,但有时它被视为移动/重命名,有时它被视为删除+添加。因此,我想知道如何使其始终移动/重命名?
Take this one https://github.com/suntong/easygen/commit/b387613a1a233cc97462a77c86fcaef105f5b8dc例如,在底部,我们可以看到几个移动/重命名的情况,例如easygenapi/tf-varcaser.go → tf-varcaser.go
。请注意,此类动作是跨文件夹/文件夹之间!即,我did it!
但还有很多其他情况git mv
被视为删除+添加,显示在完全相同的更改日志中。再说一遍,我正在做git mv
一直以来。为什么git
表现不同?
有没有万无一失如何在保留历史记录的同时移动/重命名 git 文件?
太长;博士;不
更长的版本:
根据我的经验,只要文件未修改,git 就非常擅长检测移动/重命名。 Git 使用启发式方法尝试并定位移动。如果多个文件过于相似,或者文件在移动过程中被修改,导致其与原始文件相差太大,则可能会欺骗它。
我发现做到这一点的最好方法是进行多阶段提交,将所有移动分成一个提交,然后在另一个提交中进行更改。例如...
git mv foo.txt bar.txt
git commit
... modify bar.txt ...
git add bar.txt
git commit
它不能保证您的动作被正确检测到,因为当有多个候选者时它仍然会感到困惑。然而,它对我来说非常有效,并且捕获了大多数情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)