如何将单个文件恢复到以前的版本? [复制]

2023-12-30

有没有办法对文件进行不同的提交。 假设我修改了一个文件 5 次,在提交并推送到存储库后我想返回更改 2 次。

根据我的理解,唯一的方法是保留许多分支,我说得对吗? 如果我是对的,几天之内我将拥有数百个分支机构,所以我可能并没有真正理解它。

有人能澄清一下吗?


让我们首先对我们想要做的事情进行定性描述(本·斯特劳布的回答中提到了大部分内容)。我们已经进行了一些提交,其中五次更改了给定文件,并且我们希望将该文件恢复到以前的版本之一。首先,git 不保留单个文件的版本号。它只是跟踪内容 - 提交本质上是工作树的快照,以及一些元数据(例如提交消息)。因此,我们必须知道哪个提交具有我们想要的文件版本。一旦我们知道了这一点,我们就需要进行一次新的提交,将文件恢复到该状态。 (我们不能只是乱搞历史,因为我们已经推送了这些内容,而编辑历史会扰乱其他人。)

因此,让我们从寻找正确的提交开始。您可以非常轻松地查看对给定文件进行修改的提交:

git log path/to/file

如果您的提交消息不够好,并且您需要查看每次提交中对文件做了什么,请使用-p/--patch option:

git log -p path/to/file

或者,如果您更喜欢 gitk 的图形视图

gitk path/to/file

您也可以在通过视图菜单启动 gitk 后执行此操作;视图的选项之一是要包含的路径列表。

无论哪种方式,您都可以找到包含所需文件版本的提交的 SHA1(哈希值)。现在,您所要做的就是:

# get the version of the file from the given commit
git checkout <commit> path/to/file
# and commit this modification
git commit

(checkout命令首先将文件读入索引,然后将其复制到工作树中,因此不需要使用git add将其添加到索引中以准备提交。)

如果您的文件可能没有简单的历史记录(例如重命名和副本),请参阅 VonC 的精彩评论。git可以指示更仔细地搜索此类内容,但会牺牲速度。如果你确信历史很简单,那么你就不必费心了。

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

如何将单个文件恢复到以前的版本? [复制] 的相关文章

  • 如何像对待普通目录一样对待嵌套存储库(子模块)?

    我的 WordPress 网站是使用 Git 进行版本控制的 包括wp content plugins 文件夹 现在有一个插件 wp editormd 带有自己的 Git 存储库 wp content plugins wp editormd
  • 判断 Git 提交是否是合并/恢复提交

    我正在编写一个脚本 需要检查特定提交是否是合并 恢复提交 我想知道是否有 git 技巧 到目前为止我想到的 我绝对不想依赖这里的提交消息 是检查HASH 2看看我是否没有收到错误 是否有更好的方法 判断某个东西是否是合并很容易 这是不止一位
  • 是否存在比 SVN 更快的集中版本控制?

    我已经使用 SVN 很长时间了 现在我们正在尝试使用 Git 我在这里谈论的不是中心化 去中心化的争论 我唯一关心的是速度 后一个工具要快得多 但有时 我需要使用一种集中式方法 这种方法比分散式方法更简单 更简单 学习曲线非常快 这节省了大
  • Gerrit 安装后无法克隆所有项目存储库

    我有一个新设置的 Gerrit 实例 目前只有两个存储库 所有项目 binutils 测试 尝试克隆所有项目时 我收到以下错误 git clone ssh user hostname 29418 All Projects Initializ
  • Git 命令显示我对给定远程的权限

    同事可以从远程存储库获取数据 但不能推送到远程存储库 我怀疑他对遥控器只有读权限而没有写权限 我可以通过多种方法来检查这一点 但我想不出他可以在 git 中使用的方法 是否有 git 命令可以显示给定远程存储库的权限 No Git 本身不处
  • `git rm --cached` 和 `git update-index --assume-unchanged` 之间的区别?

    我不明白之间的区别git rm cached and git update index assume unchanged 我知道git rm cached
  • 如何修复树与树之间的 Git 错误断开链接?

    我的事务被中断 当我再次尝试时 我遇到了空或损坏的对象错误 在另一个问题之后 我删除了所有空文件 当我运行时 git fsck full 我收到这个错误 Checking object directories 100 256 256 don
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • SSH 到 Openshift 服务器失败

    我正在 openshift 服务器上使用 jboss catridge 我希望与其他人共享此实例并添加其他用户的公钥 id rsa pub 当其他人尝试访问该实例时 他会收到以下错误 我在他的实例中尝试了同样的方法 但看到了同样的错误 与
  • 如何解决 VSTS 中拉取请求中的合并冲突?

    我已经创建了拉取请求 我进入了这个 批准 按钮不执行任何操作 并且 完成 被禁用 如何解决拉取请求中的冲突 Update 微软刚刚添加了基于浏览器的合并 这可能会让你摆脱小冲突的困境 并提供自 Sprint 150 起改进了不同场景的可视化
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • git pull,忽略深度,如何不拉取整个历史记录?

    我们有一个巨大的多 GB git 存储库 主要是二进制对象 克隆需要几天时间 实际的主分支 没有历史记录 只有大约 20MB 所以我想 深度为 1 的 git 克隆就是解决办法 然而 现在我需要将某人的更新拉到主服务器 我们没有分支 当我拉
  • 在 github 上的 fork 中跟踪上游的最佳实践

    摘要 对于要维护一组本地更改的上游存储库 处理长期运行跟踪的最佳实践是什么 我想让 github 上的 fork 与上游保持同步 但仍然允许清晰跟踪 fork 特有的更改 对于本次讨论 假设upstream指向主项目存储库并且origin指
  • git Push over sshfs 失败,并显示“关闭 sha1 文件时出错:错误的文件描述符”

    我们使用 sshfs 通过 SSH 安装文件系统 并将其用作 git 存储库协作的远程存储 Mac OSX 10 6 6 到 RHEL 3 服务器 SSHFS 版本 2 2 MacFUSE SSHFS 2 2 0 MacFUSE 库版本 F
  • 丢失了我在 GIT 中的提交。你会不小心删除提交吗?

    我正在使用 git gui 但看不到我的分支 我知道我今天检查了一些东西 在完成提交并使用分支查看器验证后 我更改为较早的分支 我对之前的分支进行了更改 然后想返回到当前的分支 但我再也看不到它了 任何帮助都会很棒 回答你的问题 在大多数情
  • 格里特:! [远程拒绝] HEAD -> refs/publish/master (没有新的更改)

    我做了一些更改 提交了它们并将分支推送到 Gerrit git push gerrit 现在我的更改没有出现在 Gerrit 中 我认为这是因为我手动推送更改而不是使用git 审查 https github com openstack in
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • 在 Azure DevOps 项目之间移动存储库时保留拉取请求

    我在同一帐户内有两个 Azure DevOps 项目 我想将存储库从一个项目移动到另一个项目 这一页探索如何在具有完全保真历史记录的团队项目之间移动 git 存储库 https learn microsoft com en us azure
  • 使用终端时 Git 推送在总计后卡住了?

    我尝试将一些文件推送到Github 总大小只有22 2M 我不知道为什么它在总行之后卡住了 我读过推送到 Github 时 Git 推送挂起 https stackoverflow com questions 16906161 git pu

随机推荐

  • SVN:XML 格式错误错误

    我正在尝试从远程存储库签出分支 签出多个文件 然后签出失败并出现以下错误 svn E175009 XML 响应包含无效的 XML svn E130003 格式错误的 XML 格式不正确 令牌无效 是什么导致了这个问题 有没有办法修复远程存储
  • 如何查看公共数据集?

    我正在尝试按照 GitHub 网站上的说明查看 GitHub 公共数据集 那里的说明说 添加项目名称 githubarchive 但是在 BigQuery 网站上时 我看不到添加项目的方法 我确信我只是没有正确注册或类似的事情 但我不知道如
  • 检查是否设置了对象属性 - SimpleXML

    我有一些 XML 正在使用 PHP 的 SimpleXML 类 并且 XML 中有一些元素 例如
  • 将自定义视图添加到导航项后,自定义视图始终返回 nil

    下面的代码添加了一个自定义视图navigationItem成功了 但是当尝试访问时customView它总是会回来nil override func viewDidLoad super viewDidLoad let customView
  • os.path.join 和 os.sep 连接的使用差异

    我正在尝试弄清楚使用以下方法是否更好 os path join str1 str2 or str1 os sep str2 分析与timeit我发现 正如预期的那样 串联速度更快 timeit playground os sep Text
  • 从 XPS 文档中提取单个页面

    我需要拆分现有的 XPS 文档并创建一个新的 XPS 文档 其中只有原始文档的一页 我尝试复制文档并从复制的文档中删除页面 但这非常慢 有没有更有效的方法来做到这一点 请使用 C Thanks 解决 public void Split st
  • 中断 D3.js 中的滚动转换

    我正在使用scrollama javascript 库编写一篇 scrolllytelling 文章 其中涉及当用户滚动时将D3 图形移入和移出视图 它大部分工作正常 但如果我滚动太快 图表就会堆积在一起 这是一个jsfiddle http
  • 编译关于缺少 @required 协议方法未出现的警告

    今天早上我正在修改 XCode 4 5 2 想要制作一个表格视图 我自然地添加了UITableViewDataSource and UITableViewDelegate我的视图控制器定义上的协议 import
  • 通过 Linux 终端运行 Java GUI 应用程序

    我在 Ubuntu 上尝试通过终端运行 Java GUI 应用程序 当我尝试运行它时 出现 HeadlessException 下面是堆栈跟踪 Exception in thread AWT EventQueue 0 java awt He
  • 清除本地存储但免除某些值。

    有没有办法清除 window localStorage 即window localStorage clear 但豁免某些键 值对 不 但您可以将所需的值保存在变量中 然后清除localStorage然后再次将存储在变量中的项目添加到其中 E
  • 查找总和等于“k”的子数组的数量

    我们将得到一个整数数组和一个值k 我们需要找到总和等于的子数组的总数k 我在网上 Leetcode 发现了一些有趣的代码 如下 public class Solution public int subarraySum int nums in
  • Scala Play 框架 Web 应用程序托管流程

    我正在使用 scala 和 play 框架从事一个网络项目 我担心应用程序部署部分 我需要在 Glass Fish 服务器中托管我的应用程序 那么有人有这方面的经验吗 我有托管 javaEE 应用程序将 war 文件上传到服务器的经验 但我
  • PHP 警告:unpack():类型 n:输入不足 - 日志条目

    所以我找到了这个错误日志 PHP Warning unpack Type n not enough input need 2 have 0 in file line 所述文件和行包含以下代码 answerHeader unpack ntyp
  • R:所有排列的前 N ​​个

    我正在寻找一个函数 可以列出所有n 给定输入向量的排列 通常只是序列1 n 也可以只列出所有 n 中的前 N 排列 第一个要求得到满足 例如permn 从包装中combinat permutations 从包装中e1071 or permu
  • ng-controller 指令和路由中的控制器有什么区别?

    我通过了AngularJS 网站上的教程 http docs angularjs org tutorial我注意到在step 7 http docs angularjs org tutorial step 07 它们改变了将控制器引入应用程
  • 查找 Git 存储库的大小

    查找 Git 存储库大小的简单方法是什么 我的意思不是du h在我的存储库的根目录中 我有很多被忽略的文件 因此该大小与我的存储库总大小不同 我本质上想知道克隆我的存储库时会传输多少数据 请注意 自从git 1 8 3 2013 年 4 月
  • ACR122u卡仿真模式发送PN532命令

    我刚刚读过this https stackoverflow com a 23197444 1852589回答有关如何将我的 ACR122U 置于卡模拟模式的问题 我确实明白其目的 但您需要如何将命令发送到 ACR122u 据我所知 FF00
  • 实体框架:“where 子句中的未知列”

    我正在开发一个应用程序 该应用程序将概述当天在剧院放映的电影 我得到以下异常 where 子句 中的未知列 Extent2 Movie ID 这是抛出异常的地方 额外的变量 movies2 这只是我为调试所做的事情 public Actio
  • 在R中使用ccf进行互相关[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在 R 中使用 ccf 来计算两
  • 如何将单个文件恢复到以前的版本? [复制]

    这个问题在这里已经有答案了 有没有办法对文件进行不同的提交 假设我修改了一个文件 5 次 在提交并推送到存储库后我想返回更改 2 次 根据我的理解 唯一的方法是保留许多分支 我说得对吗 如果我是对的 几天之内我将拥有数百个分支机构 所以我可