要将git代码回滚到以前的commit,主要有两个步骤。 首先,将本地代码分支回滚到指定版本或tag标记的提交id,然后将回滚到本地的代码推送到远程仓库,以将远程分支回滚到其历史版本。 本地代码回滚使用git reset命令,远程仓库使用git push命令。
git reset命令
本地代码回滚主要以git reset命令为中心,将版本库和工作目录更改为已知状态。 更具体地说,git reset将调整头部引用以指向指定的提交,缺省情况下索引也会更新以匹配该提交。 如果需要,git reset命令还可以修改工作目录以显示指定发件人的项目修订。
git reset命令有三个主要选项: `--soft `、`--混合`、`--hard `。
软件提交
--soft将HEAD引用指向指定的提交。 索引和工作目录的内容保持不变。 此版本的命令受“最小”影响,并且仅更改一个符号参照的状态以指向新的提交。
混合提交
- -混合指向指定HEAD的提交。 索引内容也将更改以适应指定提交的树结构,但工作目录的内容不会更改。 此版本的命令将索引设置为临时保存提交的所有更改时的状态。 这将显示工作目录中是否有更改。 - -混合是git reset的默认模式。
hard提交
此命令将HEAD引用指向指定的提交。 索引内容也会更改,以匹配指定提交的树结构。 此外,工作目录的内容也会发生更改,以反映指定提交显示的树的状态。 更改工作目录时,整个目录结构将更改为与指定的提交相对应。 您所做的任何修改都将丢失,新文件将被删除。 恢复指定提交但不在工作目录中的文件。
git reset选项的影响
选项
头戴
索引
工作目录
--soft
是
不
不
- -混合
是
是
不
--hard
是
是
是
本地代码回滚
首先,使用git log查找要回退的提交标志(commit id )。 此命令显示距离最近的最远的提交日志
$ git log
或者,以下选项仅显示提交的commit id和相应的注释:
$ git log --pretty=oneline
36915978 c 5b7 E6 cf 4364 b0b 778409 ba 375 e 14289 alljarchangetorelease
3989905 AE 07 a 92741 cfedb 0391544666 df 45885 deljacoco
.
然后回滚到git reset指定的commit id
$ git reset --hard
硬件选项。 表示将工作区、暂存区和版本库的记录完全恢复到指定的版本库。
回滚远程仓库代码
要将本地回滚代码推送到远程仓库,请使用增强选项`-f `或`--force `;
$ git push -f origin
如果将本地回滚代码强制推送至远程仓库,则对于主分支操作,很可能会提示您没有权限强制推送,如下所示:
git@macbook-proXXX-xx(master ) $ git PS定向头--force
总值delta0),reused0(delta0) )。
远程: git lab : youarenotallowedtoforcepushcodetoaprotectedbranchonthisproject。
to http://git lab.XXX.com/xxxx/XXX-xx.git
! [ remote rejected ] head-master (预接收hookdeclined )
error : failedtopushsomerefsto ' http://git lab.XXX.com/xxxx/XXX-xx.git '
以gitlab为例,常见的主分支被设置为保护分支,不允许推式- -力。 必须在下图中操作。
如上面的红圈示例所示,解禁单击路径是repository-protected branches-unprotect,解禁后可以使用强制推送操作。