git,在保留历史记录的同时移动/重命名文件的可靠方法

2024-03-07

我知道有“很多”现有问题看起来很相似,所以让我在问我的问题之前总结一下它们。

  • 答案是是否可以在 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(使用前将#替换为@)

git,在保留历史记录的同时移动/重命名文件的可靠方法 的相关文章

随机推荐

  • SwiftUI TextField 最大长度

    是否可以设置最大长度TextField 我正在考虑使用处理它onEditingChanged事件 但仅在用户开始 完成编辑时调用 而在用户键入时不会调用 我也阅读了文档 但还没有找到任何东西 有什么解决方法吗 TextField text
  • 如何使用 jQuery 删除周围的 DIV?

    在 Wikispaces 中 当您将目录添加到主要内容区域时 您在该主要内容区域中使用的任何标题 h1 h6 都会自动放置在目录中 并作为锚链接 单击该链接后 带您向下翻页至目录中引用的标题 默认情况下 wikispaces 用 div 包
  • 如何在 r 中创建水平堆积条形图风格的时间序列图

    我想创建一个水平 堆叠条形 类型图 其中日期沿 x 轴运行 我的样本在 y 轴上显示为条形 在下面的简单示例中 我有三个样本 a b c 每个样本包含三个值 0 1 2 我希望水平条根据沿 x 轴的每个时间步长的值进行着色 这样我最终会得到
  • 流媒体 YouTube 视频

    我正在编写一个使用流媒体播放 YouTube 视频的应用程序 第一种方法 我正在使用 GData API 获取视频的 RTSP URL 这是播放 RTSP url 的代码 VideoView mVideoView new VideoView
  • 模式中的表单输入未按要求显示

    我已经阅读了一些相关文章 但没有成功解决我自己的让表单字段按要求显示的问题 也许问题出在外面 但我想分享一下 以防它突出一个独特的案例 这是一个可以完整查看的课堂作业here https futurethang github io Trai
  • Angular 5,具有 3 种状态的 Angular Material 复选框(选中、未选中、不确定)

    我是 Angular 和 Angular Material 的新手 现在我在一些项目中担任支持人员 有一个带有过滤器和一个复选框的网格 用于检查网格中的用户是否处于活动状态 非活动状态或未选择状态 如果只有两个选项 活动 非活动 会更简单
  • 媒体查询最大宽度与视图端口大小或窗口大小有关?

    我想知道媒体查询的最大宽度是否与视图端口大小或窗口大小有关 例如 我有这个媒体查询 media screen and max width 360px 当视口大小为 360px 或窗口大小为 360px 时 此媒体查询会起作用吗 这是视口 这
  • 使用 preg_replace 替换 php 中出现的所有内容

    正则表达式绝对是我的弱点 这个让我完全难住了 我正在构建一个相当基本的搜索功能 我需要能够根据以下模式更改用户输入 Subject 22first set 22 22second set 22 drupal wordpress 期望的输出
  • Selenium 2.42.2 webdriver 与 Firefox 27.0.1 兼容吗? [复制]

    这个问题在这里已经有答案了 Selenium 2 42 2 webdriver 与 Firefox 27 0 1 兼容吗 如果不兼容 那么它与哪个 Firefox 版本兼容 我正在使用 Selenium 2 42 2 网络驱动程序 我写的测
  • memcached 使用 Django 监听 UDP

    Question 我无法获得memcached正在听UDP 上班 get set delete 与姜戈 我只让 memcached 监听UDP 11211 正如我在上一个问题 https stackoverflow com question
  • 具有 Enum 类型属性的 WPF 用户控件

    我有一个UserControl called InputSensitiveTextBox继承自TextBox 它有一个我定义的属性CurrentInputType 其类型为MyControlsNamespace SupportedInput
  • 如何:旋转选定/设置的图像 (Flutter)

    从图像选择器 画廊 相机 中选择图像后 我成功地将图像旋转为横向 纵向 这工作正常 并将继续将新图像设置为我想要的方向 但是 我尝试使用相同的方法来旋转已选择 设置的图像 但它不起作用 这是我正在使用的逻辑 import package i
  • SASS/SCSS @import 前面的 ~ 是什么意思/做什么?

    我在 GitHub 上被告知开始使用 在我的 SASS SCSS 之前 import路径 试图用谷歌搜索但找不到正确的答案 我想这太新手了 甚至懒得写 但我想学习它 它指的是node modules目录 或其等效目录 例如 在 Angula
  • 如何获取 Zune 中定义的设备名称?

    在 Zune 中 可以通过 Zune gt 设置 gt 手机 gt 同步选项更改手机名称 例如 我将手机名称更改为 myphone lumia 900 我怎样才能得到这个名字 使用DeviceStatus DeviceName它仅返回型号
  • Python IDLE 无法打开文件,显示“打开文件操作无法连接到打开和保存面板服务”

    刚刚升级到带有 m1 pro 芯片的新 MBP 我在尝试通过 IDLE 打开文件时遇到一些奇怪的问题 它抛出一个错误 说 打开文件操作无法连接到打开和保存面板服务 我尝试重新安装python 当在IDLE的服务设置下查看时 我找不到这样的服
  • 如何重命名 android-debug.apk

    我正在使用 Cordova 5 1 1 和 ionic 框架来创建我的 android 但是 当我尝试构建 apk 时 为什么文件名始终是 android debug apk 有什么办法可以重命名吗 cordova 创建 hello com
  • 如何在每个页面的侧边栏中包含目录树

    我正在 Sphinx 中生成 html 文档 如何修改文档中每个 html 页面的侧边栏 以便它们包含目录树 默认情况下 目录树似乎只显示在master doc页面 并且仅在主区域而不是侧边栏 是否有捷径可寻 我将使用 readthedoc
  • Android studio 3.1 每次重建工程即可看到变化

    将我的 android studio 更新到版本 3 1 后 我遇到了一个问题 当我对代码进行一些更改时 然后启动执行 我会得到旧的代码执行 直到我重建项目或清理它并重试 那是问题吗 PS 这发生在我的旧项目中 我还没有尝试过新项目 我认为
  • scipy 中的修剪树状图(层次聚类)

    我有一个大约有 5000 个条目的距离矩阵 并使用 scipy 的层次聚类方法对矩阵进行聚类 我为此使用的代码是以下片段 Y fastcluster linkage D method centroid D distance matrix Z
  • git,在保留历史记录的同时移动/重命名文件的可靠方法

    我知道有 很多 现有问题看起来很相似 所以让我在问我的问题之前总结一下它们 答案是是否可以在 git 中移动 重命名文件并保留其历史记录 https stackoverflow com questions 2314652 is it pos