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

git 还原文件到其他版本

读:

在今天的文章中,您将学习如何确定您在项目历史中的位置,如何还原较旧的文件版本以及如何创建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 还原文件到其他版本

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值