git 版本回退及远程仓库版本回退

在日常coding的时候,有时因为某些原因需要进行版本回退(回滚),具体操作如下:

1. git log :使用该命令查看由近至远提交日志记录,查看commit_id

$ git log

commit fbb68a72151353e6c5c256204a55eb596cf44cfe
Author: Brians <[email protected]>
Date:   Fri May 22 16:52:22 2020 +0800

    版本2.0

commit fd14ac63554c030c26232f7b6b823fac64056f37
Author: Brians <[email protected]>
Date:   Thu May 21 16:26:29 2020 +0800

    初始版本1.0

......

提交记录过多的情况下,输入 q 即可退出 git log 显示

2. 如果感觉 git log 显示信息过多,可使用命令 git log --pretty=oneline ,只显示提交的commit_id和对应的提交说明

$ git log --pretty=oneline

fbb68a72151353e6c5c256204a55eb596cf44cfe 版本2.0
fd14ac63554c030c26232f7b6b823fac64056f37 初始版本1.0

3. git reset --hard commit_id :获取到所需回滚版本的 commit_id 后使用该命令进行版本回滚

$ git reset --hard fd14ac63554c030c26232f7b6b823fac64056f37

HEAD is now at fd14ac6 初始版本1.0

此处commit_id可以不必完整填写,只填前几位字符即可,git 会自动查找,如可写为 git reset --hard fd14ac6

4. 如果版本不小心回退错了,怎么返回之前版本(未来版本)呢?命令窗口没有关闭的话,我们可向上查找之前版本的commit_id,使用 git reset --hard commit_id 命令即可

$ git reset --hard fbb68a

HEAD is now at fbb68a7 版本2.0

当前如果窗口关闭的情况下,commit_id看不到了,我们可以使用 git reflog 命令查看

$ git reflog

fbb68a7 HEAD@{0}: reset: moving to fbb68a
fd14ac6 HEAD@{1}: reset: moving to fd14ac63554c030c26232f7b6b823fac64056f37
fbb68a7 HEAD@{2}: commit: 版本2.0
fd14ac6 HEAD@{3}: commit (initial): 初始版本1.0

然后使用 git reset --hard commit_id 进行版本回退至未来版本即可。

5. 远程仓库分支版本回退

如果之前版本已经提交到远程仓库分支上了,我们本地进行版本回退后,因为本地版本是低于远程仓库版本的,所以需要使用 git push -f  强制推送至远程分支上进行覆盖,否则是无法推送至远程分支上的。

git push -f origin master

拓展说明:

一个commit 对应一个版本,有一个commit_id,是40位的16进制数字,通过SHA1计算得到,不同的文件计算出来的SHA1值不同(有很小的几率相同,可忽略),这样每一个提交都有其独特的id。每提交一个新版本,实际上 git 就会把它们自动串成一条时间线。
在 git 中,HEAD表示当前版本,也就是fbb68a7215…,HEAD^表示上一个版本,HEAD^^表示上上一个版本,往上100个版本可以写成HEAD加连续100个^,也可以写成:HEAD~100。

你可能感兴趣的:(Git)