使用Git记录文件复制操作

2024-05-22

当我使用 git-mv 在 git 中移动文件时,状态显示该文件已被重命名,即使我更改了某些部分,它仍然被认为几乎是相同的东西(这很好,因为它让我可以跟踪它的历史记录) 。

当我复制文件时,原始文件有一些历史记录,我想将其与新副本关联起来。

我尝试过移动文件,然后尝试在原始位置重新签出 - 一旦移动,git 将不允许我签出原始位置。

我尝试过进行文件系统复制,然后添加文件 - git 将其列为新文件。

有没有办法让 git 以类似于记录文件重命名/移动的方式记录文件复制操作,其中历史记录可以追溯到原始文件?


如果由于某种原因您无法开机复制检测 as in 雅库布·纳伦布斯基的回答 https://stackoverflow.com/a/1043566/1389680, 你可以forceGit 检测三个提交中复制文件的历史记录:

  • 不要复制,而是切换到新分支并move将文件移动到新位置。
  • 在那里重新添加原始文件。
  • 使用 no-fastforward 选项将新分支合并到原始分支--no-ff.

致谢陈雷蒙德 https://devblogs.microsoft.com/oldnewthing/20190919-00/?p=102904。接下来是他的流程。假设文件名为SomeFile.cpp,并且您希望将重复项命名为SomeOtherFile.cpp:

origFile=SomeFile.cpp
copyName=SomeOtherFile.cpp
branchName=duplicate-SomeFile

git checkout -b $branchName # create and switch to branch

git mv $origFile $copyName # make the duplicate
git commit -m "duplicate $origFile to $copyName"

git checkout HEAD~ $origFile # bring back the original
git commit -m "restore duplicated $origFile"

git checkout - # switch back to source branch
git merge --no-ff $branchName -m "Merge branch $branchName" # merge dup into source branch

请注意,这可以在 Windows 上执行Git Bash.


2020-05-19:上述方案的优点是不改变原文件的日志,不产生合并冲突,而且更短。前一个解决方案有四次提交:

  • 不要复制,而是切换到新分支并move将文件移动到新位置。
  • 切换到原来的分支并重命名文件。
  • 将新分支合并到原始分支中,通过保留两个文件来解决细微的冲突。
  • 在单独的提交中恢复原始文件名。

(解决方案取自https://stackoverflow.com/a/44036771/1389680。 https://stackoverflow.com/a/44036771/1389680.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Git记录文件复制操作 的相关文章

  • 在 Web 应用程序中显示最新的提交值?

    我有一些 Rails 应用程序 我使用 Git 作为版本控制系统 我使用 GitHub 或 Beanstalk 作为存储库主机 从理论上讲 我想要做的事情非常简单 以某种方式在 Web 应用程序的页脚中显示最新的提交 ID 号 哈希值 这样
  • gitlab 请求将分支 A 合并到开发中(落后 3 次提交)我应该担心吗?

    在 gitlab 中创建合并请求时 我经常收到一条消息 请求将分支 A 合并到开发中 x 提交落后 gitlab想告诉我什么 我应该担心还是需要修复某些东西 什么 一段时间后合并请求在项目中打开时 由于其他人合并了自己的更改 您尝试合并到的
  • 未能将一些参考推送至 [email protected]

    当我尝试推送到 Heroku 存储库时收到此错误 我已经设置了autocrlf false在gitconfig中 但这个问题仍然存在 我也尝试过这个解决方案here https stackoverflow com questions 566
  • 我在哪里? *(无分支)

    我已经熟悉了创建 合并和删除分支 我想知道我在哪里 这样我就不会将工作提交到错误的分支 我用git branch a看看我有哪些分支 我认为星号 显示我当前所在的分支 当我得到以下信息时 这意味着什么 no branch master or
  • Git post-receive - 如何检查推送的分支是否与主分支合并

    在我们的团队中 我们通常将所有任务推送到单独的分支中 然后发布经理审查这些分支并将它们合并到 主 分支中 有时团队成员忘记将他们的分支与主分支合并 在推送之前 所以我想做的是 在用户推送后输出一条消息 请与主分支合并 我想我需要检查一些内容
  • 从自己的 gitlab 服务器安装节点模块

    我想从我们的 gitlab 服务器安装节点模块 这是存储库的链接 http ABCD GITLAB myGroup myNodeModule git http ABCD GITLAB myGroup myNodeModule git 根据n
  • 您的分支比“origin/master”领先 3 个提交

    我在运行时收到以下信息git status Your branch is ahead of origin master by 3 commits 我读过其他一些帖子 解决这个问题的方法是运行git pull rebase但是 rebase
  • 如何生成类似github的影响图?

    是否有一些程序 或者我错过的一些神奇的 git 插件 可以从 git 存储库获取影响图或类似的东西 而无需通过 github 就数据收集而言 我可以生成图表 我不确定从哪里开始编写自己的代码 我假设有一些标志我可以传递给 git log 来
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 自动同步两个 git 存储库

    是否可以保持同步两个 Github 存储库 远程 的特定文件夹 有两个 github 存储库 repoA 和 repoB 这两个存储库都有名为 ABC 的文件夹以及其他独特的文件夹 如果repoA的文件夹ABC中的任何文件有更新 我想自动更
  • 如何让 Gitlab 运行程序在成功构建时将代码合并到分支中

    嗯 标题几乎是不言自明的 总之 如果构建成功 我希望将一个分支 即开发 合并到另一个分支 即生产 我尝试了 jakub kania 解决方案 但我总是得到id rsa invalid format 我认为 gitlab 秘密变量以某种方式被
  • 读取上传的Excel文件而不保存它

    在这段代码中 我从用户那里获取上传的文件并将其保存在我的应用程序中的文件夹中 然后对此 Excel 文件进行 OleDbConnection 并读取数据 我的问题是 有人可以建议一种阅读此 Excel 文件的首选方法 但无需预先保存它 因为
  • 更改先前提交的作者姓名:快进推送被拒绝

    我最近在 GitHub 上打开了一个存储库 我是 Git 新手 与新人一样 我使用默认名称和电子邮件进行提交 按照最佳菜鸟传统 我发现五次提交为时已晚 现在乐趣开始了 因为我开始搜索有关如何更改这些提交的作者和提交者名称的信息 美好的 我基
  • Git:以新名称签出旧版本的目录

    如何以新名称查看目录的先前版本 我一直都有一个目录foo在我的仓库中 我想创建一个目录foo old在我当前的工作树中 其内容是HEAD 2 foo 我同时需要两个版本 以确保它们给出相同的结果 测试这需要相当多的代码 并且需要同时提供两个
  • GIT 和 Ruby:如何从 ruby​​ 脚本内部取消设置 GIT_DIR 变量?

    我编写了一个非常简单的 部署 脚本作为我的post update挂钩到我的裸 git 存储库中 变量如下 live domain mydomain com staging domain stage mydomain com git repo
  • 如何收集和存储tellp()、tellg()返回类型?

    我正在编写一个在文件中维护 linked list 的程序 因此 我通过使用tellp tellg 遍历文件并将其添加到特定的长整数 可以视为偏移量 以到达新位置 一个简单的例子是 long next offset sizeof long
  • GitPython 检查 git pull 是否更改了本地文件

    使用 GitPython 我只想在拉取后本地文件发生更改时才调用函数 例如 如果我在一台单独的计算机上进行推送 然后拉第一台计算机 它按预期工作 但不提供任何输出 理想的输出是已更改的文件列表 或者只是告诉我拉动是否有错误 没有拉动 因为分
  • 无法访问 res 文件夹?

    我有一个 Java 编程问题 需要帮助 我的类文件位于单独的包中 不是默认包 我正在尝试从我的 res 文件夹访问文件 我已将其添加为类文件夹 使用属性 gt 库 gt 添加类文件夹 在我的类中 我有以下代码 InputStream IS
  • Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的用途是什么?

    The 安卓源码 http android git kernel org 由以下人员管理repo http source android com source version control html 使用 repo 同步时 一个名为 re
  • 从包含大量文件的目录中检索文件

    我的目录包含近 14 000 000 个 wav 格式的音频样本 所有普通存储 没有子目录 我想循环浏览文件 但是当我使用DirectoryInfo GetFiles 在该文件夹上 整个应用程序冻结了几分钟 可以用另一种方式完成吗 也许读取

随机推荐

  • Jquery 表单验证 - 电话号码

    我已经在表单上设置了 jQuery 验证 该验证当前测试电话号码字段不为空并且是一个数字 但我希望它能够处理用户在手机 区号后放置空格的情况 谁能建议我需要做什么才能允许这样做 这是我当前的代码 if phone length 0 name
  • ack造成的风暴延迟

    我正在使用 kafka storm 连接 kafka 和 Storm 我有3台服务器运行zookeeper kafka和storm kafka中有一个主题 test 有9个分区 在storm拓扑中 KafkaSpout执行器的数量为9 默认
  • 记录 pyarrow 在 S3 上创建的 parquet 文件名

    我们使用 pyarrow 将数据附加到存储在 S3 已分区 中的现有 Parquet 数据集 它每小时在 AWS lambda 上运行几次 一个最小的例子是 import pyarrow as pa import pyarrow parqu
  • 在 Android 中获取联系方式需要花费大量时间?

    您好 目前正在做一个与联系人相关的项目 我正在从联系人中获取详细信息 电子邮件 电话号码和联系人姓名 效果很好 但问题是获取联系方式需要很长时间 超过 1000 个联系人 包括从社交网站同步的联系人 这样我就放了一个Asynchronous
  • 使用 jQuery 提交一个又一个表单?

    如何设置自动队列系统来依次运行多个提交 我不希望他们立即提交 否则可能会破坏我的后端 PHP 脚本 这是一个简单的例子 假设每个表单都可以独立提交 并且主提交将串行运行所有表单
  • 依赖注入:没有为此对象定义无参数构造函数

    我正在尝试使用依赖项注入 NET Framework 4 6 ASP NET MVC 但收到错误 No parameterless constructor defined for this object 如果我还提供一个无参数构造函数Hom
  • 按纬度和经度查询雅虎天气

    我想使用雅虎查询通过纬度和经度获取一些天气数据 但现在好像这个查询不可用 查询如下 select from weather forecast where woeid in SELECT woeid FROM geo placefinder
  • 文件递归搜索

    我试图在根目录及其子目录中查找文件 步骤1 在指定路径中查找目录 步骤2 如果找到上述目录 则在其子目录之一中查找文件 为此 我使用下面的代码片段进行递归搜索 现在 这里的问题是 当它满足我的上述要求时 如何突破递归 boolean bFi
  • Control.Parallel.Strategies 中 Eval 的绑定运算符如何严格评估其参数?

    Control Parallel Strategies 的源代码 http hackage haskell org packages archive parallel 3 1 0 1 doc html src Control Paralle
  • 从 CSV 到 MySQL 的换行问题

    我正在将 csv 文件导入 MySQL 除了文件中的换行符之外 一切正常 我的 csv 行之一如下所示 42 E A R Classic Earplugs ear images ear classic jpg 5 Proven size s
  • GetCPUDescriptorHandleForHeapStart 堆栈损坏

    我在使用 DirectX 12 0 编程时偶然发现了一个相当不寻常的问题 迄今为止还没有任何研究具有洞察力 我正在使用 C 而不是 C 进行编程 官方 DirectX 12 标头似乎支持 C 和 C 的绑定 但是编写 C 等效代码来执行上述
  • 为什么changeResourceRecordSets没有被授权访问此资源?

    我正在尝试在 Route 53 中创建一条别名类型的新记录 以告诉 Route 53 起诉 CloudFront 来为该站点提供服务 我正在尝试使用以下代码来执行此操作 let options ChangeBatch Changes Act
  • 如何在 firebase.auth 中更新用户电话号码(js,ts)

    我如何更新在 firebase auth 中用于身份验证的用户电话号码 Firebase 给出方法 updatePhoneNumber phoneCredential 但我们需要给予电话凭证 此凭证采用对象 interface AuthCr
  • 如何使用 Beyond Compare 3 作为 svn 的 diff3-cmd?

    I saw this https stackoverflow com questions 294286 how to use svn with beyond compare 3帖子解释了如何让 BC3 作为 Subversion 的 dif
  • 获取用户最近城市的最佳方式? Python/Django

    我有一个数据库中城市数量有限的网站 需要向用户显示距离他当前位置最近的城市 我可以通过 MaxMind API 获取位置 但我想获取数据库中距用户城市最近的城市 例如 如果我的数据库中有这些城市 Los Angeles San Franci
  • 如何在Python中处理xpath中的单引号和双引号

    我有一个 XPath 它在 XPath 中有一个单引号 这会导致SyntaxError error 我尝试过转义序列 xpath label contains text Ayuntamiento de la Vall d Uix Festi
  • NS_ERROR_XPC_BAD_CONVERT_JS

    在尝试将 appendChild 添加到刚刚创建的元素 在 for 循环中 后 我收到此错误 这个错误是什么意思 我想不可能附加某物 到 DOM 中并不真正存在的元素 我如何解决它 innerHTML 有效 但我认为这不是真正干净且正确的方
  • 如何将Excel中的每个条目转换为一行“矩阵”表

    我有类似的东西 1 2 3 a x o x b x x o c o o o 并想将其转换成像这样的线 1 a x 1 b x 1 c x 2 a o 2 b x 2 c o 3 a x 3 b o 3 c o 通过使用Excel文档中的公式
  • 使下划线 CSS 过渡改变方向

    我正在使用我找到的一些风格这个网站 http callmenick com post simple css3 transitions transforms animations compilation创建有效的下划线幻灯片 请参见jsfid
  • 使用Git记录文件复制操作

    当我使用 git mv 在 git 中移动文件时 状态显示该文件已被重命名 即使我更改了某些部分 它仍然被认为几乎是相同的东西 这很好 因为它让我可以跟踪它的历史记录 当我复制文件时 原始文件有一些历史记录 我想将其与新副本关联起来 我尝试