最近生病,躺在床上,准备写点东西
我是拖延症晚期患者 , 比如一直想把git源码翻一翻 , 向 linus Torvalds 致敬
无奈, c语言还不会
好吧, 先从简单的开始, 学习一下 git 使用, 记录下来, 可能有点用吧
git 的源码由社区贡献,相关书籍也同样由社区编写和维护
我就想知道,本领高的程序员,不用吃饭的吗
言归正传
git restore 说明
git restore 用于还原工作区或暂存区中的文件,使其恢复到指定状态(通常是 HEAD、index 或其他 commit)
它的主要用途
• 撤销对工作区的更改(恢复到 index, HEAD 状态)。
• 撤销对暂存区的更改(恢复到 HEAD 状态)。
• 同时恢复工作区和暂存区的更改。
先搭个环境
# 新建工作目录
mkdir gitwk
# 初始化仓库
git init
# 提交
echo "000" >> test.txt
git add test.txt
git commit -a -m "000"
# 暂存
echo "111" > test.txt
git add test.txt
# 修改
echo "222" > test.txt
retore 撤销工作区的更改
restore 可以恢复 工作区的文件
# 文件恢复了,内容没有丢失
`git restore test.txt`
效果
Before:
Worktree: [222]
Index: [111]
HEAD: [000]
After:
Worktree: [111] <- Recovered from Index
Index: [111]
HEAD: [000]
撤销暂存区的更改
restore 可以恢复 暂存区的文件
git restore --staged test.txt
效果
Before:
Worktree: [222]
Index: [111]
HEAD: [000]
After:
Worktree: [222]
Index: [000] <- Recovered from HEAD
HEAD: [000]
取消暂存是有条件的
如果第一次把文件误加入到 暂存 中
touch b
git add b
这样就可以了取消暂存 , 因为 HEAD 中没有该文件
git restore --staged b
如果文件已经提交过多次, restore 只是恢复了 index 的内容, 并不能取消暂存
可以这样做,来取消暂存
git rm --cached b
git commit -m "delete b"
可以恢复任意文件
可以恢复 工作区或index 中任意文件 到指定 分支结点
下面是 恢复工作区文件的示例
git restore --source master test.txt
效果
Before:
Worktree: [222]
Index: [111]
HEAD: [000]
After:
Worktree: [000] <- Recovered from master HEAD
Index: [111]
(master)HEAD: [000]
我太天才了, 解决了这么一个大问题
我竟然,从仓库恢复了一个文件的内容
问题还没有完
恢复到任意版本
我想把文件 恢复到 任意版本
git restore --source master~1 test.txt
master~1 ~1 是恢复到 master 分支的前一个版本
当然,也可以用提交结点的哈希码
git restore --source 79b2ba36 test.txt