git 签出(恢复)指定文件

本文介绍如何使用Git从历史提交记录、分支记录恢复指定文件的方法,包括从当前分支、指定提交历史及其它分支恢复文件,同时提供了签出指定目录和文件类型的示例。

在项目开发中,偶尔会因为误删文件或其他原因需要从git仓库中恢复某些文件。此篇文章将介绍如何通过git从历史提交记录、分支记录恢复指定文件。

 

1. git checkout

说明:使用git checkout除了可以切换分支外,还可以签出指定文件。

语法

git checkout [<options>] [<branch>] -- <file>

APIhttps://git-scm.com/docs/git-checkout

注意:签出后的文件将会覆盖【工作目录】中的相同文件;若【工作目录】中的文件已删除,会创建签出的文件。

 

2. 从当前分支签出指定文件

背景:本地仓库有个a.txt文件,最近2次此文件的修改记录如下:

2.1 从上一次提交中签出指定文件

git checkout -- a.txt

提示:运行上面的命令后,将签出上次提交时a.txt文件。

 

2.2 从指定的提交历史中签出指定文件

附加上commit id,将会签出指定提交记录中的文件:

git checkout 830cf95f56ef9a7d6838f6894796dac8385643b7 -- a.txt

 

3.从其他分支签出指定文件

背景:一个仓库一般有一个master分支和其他多个brach。branch主要目的是为了某个功能开发,在开发期间 master 分支可能更新了核心模块,这时其他branch需要同步更新此模块。

说明:只需要签出时指定分支名称。

命令

git checkout master -- a.txt

 

4. 签出其他类型

除了签出制定文件外,git还支持签出指定目录、制定后缀等等。

4.1 签出某个后缀的文件

说明:签出根目录下所有 txt 后缀的文件。

命令

git checkout -- *.txt

 

4.2 签出指定目录

说明:签出 css 目录。

命令

git checkout -- css/

 

### 如何使用 `git checkout` 命令 #### 切换分支 当需要切换到某个已经存在的本地分支时,可以使用以下命令: ```bash git checkout <branch> ``` 此操作会将当前的工作目录切换至目标分支,并更新文件状态以匹配该分支的内容[^1]。 如果目标分支是一个远程分支,则可以通过 `-t` 参数创建并跟踪这个远程分支的本地副本: ```bash git checkout -t origin/<remote-branch> ``` 这一步骤不仅会在本地建立一个新的分支,还会将其设置为与指定的远程分支关联,从而简化后续推送和拉取的操作流程[^3]。 #### 创建新分支并立即切换 为了提高效率,在创建新的分支的同时可以直接切换过去,可采用如下语法结构: ```bash git checkout -b <new-branch-name> ``` 这里 `-b` 选项指示 Git 新建一个分支并将 HEAD 移动至此新分支之上。这样就无需先执行 `git branch` 再单独调用 `git checkout` 来完成整个过程[^3]。 #### 撤销未提交更改 除了管理分支之外,`git checkout` 还能用于恢复工作树中的某些文件回到最近一次 commit 或 index 所记录的状态下。具体做法如下所示: ```bash git checkout -- <filename> ``` 通过这种方式能够丢弃任何尚未被暂存或者提交的变化项,使得这些文件重新同步回最新版本控制下的样子。 需要注意的是,以上提到的功能均针对单个文件有效;若想一次性处理多个甚至全部改动过的文档,则需适当调整参数配置或是借助其他辅助工具来达成目的。 #### 查看特定历史提交内容 另外一种常见的应用场景就是检视过去的某次提交详情及其影响范围内的源码变动情况。此时只需提供完整的 SHA-1 散列值作为参照依据即可实现这一需求: ```bash git checkout <commit-hash> ``` 一旦成功签出了对应的提交点之后,默认情况下项目处于 “detached HEAD” 状态之中——意味着虽然此刻正位于某一确切时刻的历史节点上浏览资源,但实际上并没有隶属于任何一个正式命名好的分支之下[^2]。 ### 注意事项 务必小心谨慎对待每一次涉及数据覆盖性质的动作(比如强制还原),因为它们可能会永久丢失那些还未妥善保存下来的劳动成果!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值