【git】版本回退 git reset

确定需要回退的版本唯一 id

 查看提交历史: git log

git log  # 按时间先后列出所有 更新

git log -p -2  # -p 列出每次的内容差异 -2 列出前两条 更新

git log stat  #仅显示简要的增改行数统计

git log --pretty=oneline #将每个提交放在一行显示

git log --pretty=format:"%h - %an, %ar : %s"  #格式化输出内容

或者 查看 HEAD 指针变化:git reflog

git reflog  #按时间先后列出 所有 头指针变化的 记录

git reset 回退

通过以上命令 都可以获取到 某个操作 的 SHA-1 或者是 Head 的相对位置,然后通过 SHA-1 或者 Head 位置 就可以 回退

git reset --hard SHA-1 | HEAD@{num}  

git reset --hard HEAD@{4} #恢复相对于当前位置 向前的第四次操作


git reset 命令大全:

git reset  []  [] # 按照某个模式回退

git  reset  #

git reset --soft  head_id #

git reset --hard  head_id  # 还原 在 head_id 之后的所有操作

git reset --merge  head_id


记一次版本回退过程:

首先已有分支及作用:

    master : 主分支,基本上只有 python 相关的代码还在更新,前端 和 后台 已经 弃置;

   local:发布于本地环境的项目分支,源于 master,业务需求;

   sso:发布于大平台上的 项目分支,源于 master,业务需要;

   common: 由于 local 和 sso 均源于 master,享有公共的代码,这个分支即保留了 local 和 sso创建分支时的起点,用于 公共业务的修改,最后 分别 merge 到 local 和 sso;

分支介绍清楚之后,介绍一下事情经过:

   还是像往常一样,需要修改项目中的bug,bug 是 local 和 sso 共有 的 bug, 所有 在 common  上进行修复,修复完成之后,分别 merge 到 local 和 sso. 但是最近可能比较闲,因为 看 master 上 的 python 代码更新超前,想着 ,要不要 分别更新到 sso 和 local ,所以就出事了。

分别在不同分支上执行了以下命令:

common 分支上:

git rebase master

master 分支上:

git merge common

然后就是 local 和 sso 分支上分别执行了:

git merge common

执行完就出事了,local  和 sso 的 代码都变成了 local 的代码。不好赶紧恢复:

于是:

先local 分支上恢复:

git reflog
通过以上命令 查找出 rebase 操作 之前 在 local 分支上的指针
256d7a5b HEAD@{77}: rebase: <94><80><9C><9F><8A><97><98>
c61bff92 HEAD@{78}: rebase: <94><80><9C><9F>pc
7d9a95e8 HEAD@{79}: rebase: <86><8D><9D><8A>pps<80><9C><9F><89><99><90><8E><97><98>
37b8bed6 HEAD@{80}: rebase: <94><80><9C><9F><89><8B><9C>
df03c298 HEAD@{81}: rebase: <80><9C><9F><90><8E><94>
d6766c4e HEAD@{82}: rebase: checkout master
4b265ff0 (origin/common, common) HEAD@{83}: checkout: moving from master to common
d6766c4e HEAD@{84}: pull origin master: Fast-forward
e134e5c1 HEAD@{85}: checkout: moving from sso to master
e0d3196d HEAD@{86}: merge common-code: Merge made by the 'recursive' strategy.
f1aaf3bb HEAD@{87}: checkout: moving from localto sso
4d181907 (HEAD -> local, origin/local) HEAD@{88}: merge common: Merge made by the 'recursive' strategy.
22229442 HEAD@{89}: checkout: moving from commonto local

即图中的 4d181907 头指针 :

git reset --hard 4d181907

指针重新指向 该指针,代码恢复。

然后在 sso 和 common master 的 分支上同理 均执行以上操作 即可实现 代码的 回退。



你可能感兴趣的:(git)