在 git 中发现已移动或重命名的文件中的更改的策略

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

你知道这种情况,它在你身上发生过一千次:

  1. 您已移动并重命名一个文件。
  2. 那么你已经修改它了。
  3. 提交后,你需要交叉手指让 git 检测到它实际上是同一个文件(这部分通常进展顺利)
  4. 您为一系列包含移动/重命名的提交创建 PR
  5. 您想要查看更改(通过使用 gitlab 或其他工具)。 问题:文件的两个版本(已删除的版本和包含修改的新版本)仍然会单独显示(尽管有一个漂亮的小标签警告您文件已被移动)并且修改仍然很难发现因为整个文件显示为新文件(都是绿色的)。

有哪些方法可以缓解这种情况? 到目前为止我找到的唯一解决方案是自律:强制提交仅包含文件移动和重命名。允许零修改。将其留待后续提交。更好的是:在完全独立的 PR 中进行移动/重命名(以便在 gitlab 或其他工具的“所有更改”视图中仍然可以轻松看到实际更改)

这种方法的困难在于它增加了一些开销。另一个问题是不情愿的开发人员,他们不想遵守这一点或忘记这样做,因为他们看不到他们在提交时看到移动文件中的更改比审阅者更容易读取最终结果。

你知道还有其他方法吗?

git github gitlab
1个回答
0
投票

是的,你是对的,要么是受到纪律约束,要么是在编辑器中使用内置 UI,但如果你发现自己处于这种情况,那么我希望这会有所帮助:

  1. 配置 Git 以更好地检测移动和副本

git config --global diff.renames true

git config --global diff.renameLimit 999999

  1. 查看移动文件中的更改:

显示移动文件的差异,忽略移动本身

git diff --color-moved=blocks --find-renames

  1. 替代方案:使用带有 -M 和 -C 选项的 git log

git log -M -C --stat --follow path/to/file

  1. 用于查看已移动文件的特定提交:

git show --color-moved=blocks commit_hash

  1. 要查看移动文件中的实际内容更改:

git diff --color-moved=blocks HEAD^..HEAD path/to/new/file

  1. 欲了解更详细的移动检测:

git diff --find-renames=90% --break-rewrites

  1. 生成保留移动信息的补丁:

git format-patch --find-renames --break-rewrites HEAD^

  1. 对于带有移动检测的分支比较:

git diff branch1...branch2 --color-moved=blocks --find-renames

© www.soinside.com 2019 - 2024. All rights reserved.