【问题标题】:Specify Git Rename after changes更改后指定 Git 重命名
【发布时间】:2015-03-05 03:51:03
【问题描述】:

由于我经常使用的工具,我经常在准备提交之前重命名文件并对其进行更改。

此时,git不再检测文件为简单重命名,因为文件内容不同。

是否有一个命令我可以用来指定某个文件实际上也是另一个文件的重命名,即使内容看起来不同?

【问题讨论】:

  • 你用git mv重命名了吗?在这种情况下,git status 应该告诉您您重命名并修改了文件。
  • @Jan 不,我通常通过其他工具重命名文件,而不是 git。因此,为什么我希望有一个命令,以便我可以追溯地告诉服务器发生了它没有检测到的重命名。

标签: git


【解决方案1】:

不在 Git 中。 Git 使用基于相似性的启发式重命名检测(您可能需要启用它以查看更改:git diff -Mgit config diff.renames true 以始终使用它(或 git diff -Cgit config diff.renames copies 也可以检测副本)。它可以即时检测重命名。

它不进行重命名跟踪,也不在任何地方存储有关重命名的信息。


这是假设您没有忘记在提交中包含重命名的文件,即您使用了git mv <old> <new>... 只是mv <old> <new> && git add <new>

这意味着如果您使用其他工具(例如IDE,文件管理器等)重命名文件,那么您需要git add新文件(重命名后),如果旧文件存在则删除(git rm到将其完全删除,git rm --cached 将其保留在工作目录中)。

【讨论】:

    【解决方案2】:

    对于 git,您永远不应该在同一个提交中真正重命名和更改文件。您应该运行 git mv oldName newName 以确保 git 知道这是文件的简单移动,然后提交您的更改。

    【讨论】:

      【解决方案3】:

      最安全的方法是运行 git mv old new 并提交更改(不仅仅是暂存)。尽管这可能会破坏您的构建。然后进行新的更改。

      这里有一个非常好的博客和一个来自 git creator 关于这个主题的讨论(粗略)链接https://coderwall.com/p/_csouq/renaming-and-changing-files-in-git-without-losing-history

      【讨论】:

        猜你喜欢
        • 2021-11-11
        • 2016-05-09
        • 2019-03-22
        • 1970-01-01
        • 2020-08-13
        • 1970-01-01
        • 2020-07-03
        • 2019-04-29
        • 2014-08-06
        相关资源
        最近更新 更多