git 还原文件到其他版本

读:

  • 第1部分:什么是Git?
  • 第2部分:Git入门
  • 第3部分:创建第一个Git存储库
  • 第4部分:如何在Git中还原旧文件版本
  • 第5部分:3个用于Git的图形工具
  • 第6部分:如何构建自己的Git服务器
  • 第7部分:如何使用Git管理二进制Blob

在今天的文章中,您将学习如何确定您在项目历史中的位置,如何还原较旧的文件版本以及如何创建Git分支,以便可以安全地进行野性实验。

您在Git项目的历史中所处的位置,就像您在摇滚专辑中的位置一样,由称为HEAD的标记(例如磁带录音机或录音机的播放头)确定。 要在自己的Git时间轴中移动HEAD,请使用git checkout命令。

有两种使用git checkout命令的方法。 通常的用途是从先前的提交中还原文件,还可以倒回整个磁带盘并朝完全不同的方向前进。

恢复文件

当您意识到您已经完全销毁了本来不错的文件时,就会发生这种情况。 我们都这样做; 我们将文件放到一个好地方,添加并提交,然后我们决定它真正需要的是最后一次调整 ,文件最终变得完全无法识别。

要将其恢复到以前的荣耀,请使用最后一次已知提交的git checkoutHEAD

$ git checkout HEAD filename

如果您不小心提交了错误的文件版本,并且需要从更远的时间撤回该版本,请查看Git日志以查看先前的提交,然后从适当的提交中将其检出:

$ git log --oneline
79a4e5f bad take
f449007 The second commit
55df4c2 My great project, first commit.

$ git checkout 55df4c2 filename


现在,该文件的旧版本将还原到当前位置。 (您可以随时使用git status命令查看当前状态。)由于文件已更改,因此需要添加文件,然后提交:

$ git add filename
$ git commit -m 'restoring filename from first commit.'

查看您的Git日志以验证您做了什么:

$ git log --oneline
d512580 restoring filename from first commit
79a4e5f bad take
f449007 The second commit
55df4c2 My great project, first commit.

从本质上讲,您已经倒带了,并且正在收录不好的东西。 因此,您需要重新记录好成绩。

倒退时间线

检出文件的另一种方法是倒回整个Git项目。 这引入了分支的概念,从某种意义上说,分支是同一首歌的另一种选择。

当您返回历史记录时,可以将Git HEAD倒带到项目的先前版本。 该示例一直回退到原始提交:

$ git log --oneline
d512580 restoring filename from first commit
79a4e5f bad take
f449007 The second commit
55df4c2 My great project, first commit.

$ git checkout 55df4c2


当您以这种方式倒带时,如果按下“录音”按钮并继续前进,则将破坏您的未来工作。 默认情况下,Git假定您不想执行此操作,因此它会将HEAD与项目分离,并允许您根据需要进行工作,而不会意外地记录以后记录的内容。

如果您查看以前的版本,突然意识到您想重新做所有事情,或者至少尝试其他方法,那么这样做的安全方法是创建一个新分支。 您可以将这一过程视为尝试播放同一首歌曲的不同版本或创建混音。 原始材料已经存在,但是您正在分支并制作自己的版本以娱乐。

要将Git HEAD放回空白磁带上,请建立一个新分支:

$ git checkout -b remix
Switched to a new branch 'remix'

现在,您可以回到过去,并拥有一个备用且整洁的工作空间,可以随时进行任何更改。

您可以做同样的事情而无需及时移动。 也许您对自己的进度非常满意,但是想切换到临时工作区只是为了尝试一些疯狂的想法。 这也是一个完全可以接受的工作流程:

$ git status
On branch master
nothing to commit, working directory clean

$ git checkout -b crazy_idea
Switched to a new branch 'crazy_idea'


现在您有了一个干净的工作区,可以在其中沙沙一些疯狂的新想法。 完成后,您可以保留更改,也可以忘记更改的存在并切换回主分支。

为了让您的想法丢脸,请改回主分支并假装新分支不存在:

 $  git checkout master 

为了保留您的疯狂想法并将它们拉回到您的master分支,请更改回您的master分支并合并您的新分支:

$ git checkout master
$ git merge crazy_idea

分支是git的强大功能,对于开发人员来说,在克隆存储库后立即创建新分支是很常见的。 这样,他们的所有工作都包含在自己的分支中,他们可以提交并合并到master分支。 Git非常灵活,因此没有“正确”或“错误”的方式(即使是master分支也可以与它所属的远程对象区分开),但是分支使分离任务和贡献变得容易。 别太着迷,但是在您和我之间,您可以根据需要拥有任意数量的Git分支。 他们是免费的!

使用遥控器

到目前为止,您已经在自己家中的舒适和私密环境中维护了一个Git存储库,但是当您与其他人一起工作时呢?

有几种不同的设置Git的方法,以便许多人可以同时处理一个项目,因此,无论您是从某人的个人Git服务器还是从其GitHub页面上获得该克隆,现在我们都将重点放在克隆上。来自同一网络上的共享驱动器。

使用自己的私有Git存储库和要与他人共享的内容之间的唯一区别是,在某个时候,您需要push更改push送到其他人的存储库。 我们称您正在本地存储库中工作的存储库,将其他任何存储库称为remote

当你从另一个源克隆具有读写权限的资源库,你克隆从那里来作为它的起源继承了遥控器。 您可以看到克隆的遥控器:

$ git remote --verbose
origin  seth @ example.com:~ / myproject.Git ( fetch )
origin  seth @ example.com:~ / myproject.Git ( push )

具有远程起源很方便,因为它在功能上是异地备份,并且还允许其他人从事该项目。

如果您的克隆没有继承远程原点,或者您选择稍后添加,请使用git remote命令:

 $  git remote add seth @ example.com:~ / myproject.Git 

如果您已更改文件并希望将其发送到远程origin ,并且对存储库具有读写权限,请使用git push 。 第一次推送更改时,还必须发送分支信息。 最好不要使用master,除非您被告知要这样做:

$ git checkout -b seth-dev
$ git add exciting-new-file.txt
$ git commit -m 'first push to remote'
$ git push -u origin HEAD

这会将您的当前位置(自然是HEAD) 及其存在的分支推送到远程服务器。 推送分支一次后,可以删除-u选项:

$ git add another-file.txt
$ git commit -m 'another push to remote'
$ git push origin HEAD

合并分支

当您在Git存储库中独自工作时,可以随时将测试分支合并到您的master分支中。 与贡献者协同工作时,您可能需要先查看它们的更改,然后再将其合并到master分支中:

$ git checkout contributor
$ git pull
$ less blah.txt  # review the changed files
$ git checkout master
$ git merge contributor

如果您使用的是GitHub或GitLab或类似工具,则过程会有所不同。 在那里,传统上是将项目进行分叉并将其视为您自己的存储库。 您可以在存储库中工作,并将更改发送到GitHub或GitLab帐户,而无需任何人的许可,因为它是您的存储库。

如果您希望派遣它的人接收更改,则可以创建一个拉取请求 ,该请求使用Web服务的后端将补丁发送给真正的所有者,并允许他们查看并拉入您的更改。

分支项目通常是在Web服务上完成的,但是用于管理项目副本的Git命令是相同的,即使是push过程也是如此。 然后将其返回到Web服务以打开请求请求,然后完成工作。

在下一部分中,我们将介绍一些便利的附件,以帮助您将Git舒适地集成到日常工作流程中。

翻译自: https://opensource.com/life/16/7/how-restore-older-file-versions-git

git 还原文件到其他版本

git 还原文件到其他版本_如何在Git中还原旧文件版本相关推荐

  1. arm中的.a文件如何产生的_如何在IPFS中Pin一个文件?

    对IPFS中,有这样一个误解----认为存储在其中的文件是永久保存的.实际上并不是这样,存储在IPFS中的文件只在某种特殊状态下才会被一直保存,这个特殊状态就是"Pin". &qu ...

  2. matlab分析xml文件_如何在Java中读取XML文件(DOM分析器)

    matlab分析xml文件 Today we will learn how to read the XML file in Java. We will also learn how to parse ...

  3. win10系统64位安装python什么版本_如何在win10中安装Python

    本文主要讲解win10如何安装python,希望对初学的小伙伴有帮助.环境:win 10 64位操作系统1.python下载https://www.python.org/downloads/2.x和3 ...

  4. python 读取日志文件_如何在Python中跟踪日志文件?

    使用SH模块(PIP安装sh):from sh import tail# runs foreverfor line in tail("-f", "/var/log/som ...

  5. python读json文件数组_如何在python中从json文件读取json对象数组

    我有一个名为example.json的json文件,包含以下内容[{ "product/productId" : "XXX", "product/ti ...

  6. macos 虚拟镜像文件_如何在macOS中使用虚拟文件测试网络或硬盘速度

    macos 虚拟镜像文件 File transfer speeds can vary greatly from device to device. The same holds true for ne ...

  7. kylin版本_如何在 Kylin 中优雅地使用 Spark

    前言 Kylin 用户在使用 Spark的过程中,经常会遇到任务提交缓慢.构建节点不稳定的问题.为了更方便地向 Spark 提交.管理和监控任务,有些用户会使用 Livy 作为 Spark 的交互接口 ...

  8. linux中文件重命名_如何在Linux中重命名文件?

    linux中文件重命名 This tutorial will walk you through the simple steps to rename a file in Linux. 本教程将引导您完 ...

  9. chrome查看网页文件_如何在Chrome中直接将文件和网页下载到Google云端硬盘

    chrome查看网页文件 We've all downloaded files from the web to our computer. However, if you'd rather downl ...

最新文章

  1. Netweaver工作进程的内存限制 VS CloudFoundry应用的内存限制
  2. 【LintCode: 3. 统计数字】算法题解析
  3. JS如何设置获取盒模型对应的宽高
  4. JDBC模板对象是多例的
  5. Maven学习总结(17)——深入理解maven灵活的构建
  6. no required module provides package github.com/gorilla/mux
  7. 安装go编译器后没有gopath文件夹_Go 语言环境安装(集成 VS code)
  8. 如何测试前台获得的数据
  9. CBDNet:Toward Convolutional Blind Denoising of Real Photographs
  10. 平面设计个人简历模板
  11. 优炫数据库收到来自重庆市统计局的感谢信
  12. matlab或_Matlab下载安装教程
  13. 使用pr给视频局部打马赛克
  14. AI识别彻底懵逼!这到底是「牛」还是「鲨」?
  15. 【离散数学】单射、满射和双射的定义、区别
  16. 重启服务器命令有哪些,每一个重启命令区别又是什么?
  17. 【神经网络第三期】RBF神经网络基本原理和模型应用
  18. Python贪吃蛇游戏详细代码和注释
  19. 下一波模式移转-订制化制造 打通物联网任督二脉
  20. 简单、易用、易学,这个全自动测试平台真香

热门文章

  1. Fabric node sdk 1.4简明教程
  2. 桥接模式(Bridge)解析例子
  3. PgSQL · 应用案例 · 经营、销售分析系统DB设计之共享充电宝
  4. atitit,it人怎么样才容易事业成功?? 有以下五种性格的人容易成功
  5. android客户端从服务器端获取json数据并解析的实现代码
  6. iOS学习之 plist文件的读写
  7. struts2 poi excel 导出
  8. Linux网络服务-Web Service之【apache的功能、安装、配置文件介绍以及实验实例】(三)...
  9. easyui控件事件监听委托给jquery事件监听,keyup取最新值问题
  10. Python学习笔记——输入与输出用法