专业编程基础技术教程

网站首页 > 基础教程 正文

git reset 和 git rever 实践(git reset和rebase)

ccvgpt 2024-07-18 12:46:55 基础教程 14 ℃

最近工作中准备发布生产,于是将开发分支合并到 master 并且提交到远程,悠哉悠哉地坐等上线。可恶的产品 dog 又说先别上线,先提供测试环境给一线先体验一下,FUCK!怎么办?代码已经合并推送到远程,如果不撤回会影响其他团队的发布,由于以前只是对 git reset 和 git revert 了解一下,并没有深入去使用过,所以在项目代码中不敢轻易妄动,只能拜托其他同事帮忙了。吃了这次亏,决定深入学习一下这两个命令。

1、git reset 重置 commit

git reset 和 git rever 实践(git reset和rebase)

我们先创建两个 commit

现在我们使用 git reset 不加参数对commit进行重置

git reset 不加参数的情况默认使用的参数是 --mixed ,该参数模式是将提交回退到指定版本,将该版本之后所提交的改动回退到工作区。如果我们提交出错还需要编辑再提交就可以使用该模式。同时我们发现 reset 到目标版本后,之前的最新版本的 commit 已经被丢掉了。

当然我们使用 git reflog 是可以找回被 git reset 丢掉的 commit 的,我们利用 git reflog 和 git reset 恢复刚才的 reset

测试 git reset --soft

我们可以看到当带 --soft 参数时,回退目标版本后的修改内容会回退到暂存区

测试 git reset --hard

从图中我们可以看出,git reset 带 --hard 参数后,会丢掉目标版本之后的修改,此场景适用于回退,且不需要后面版本内容。

使用 reset 回退版本后,由于本地版本先于远程版本,推送时需要使用 -f 强推参数,git push -f 。

2、git revert

git revert 是将 commit 中的某一版本丢掉,然后将该版本前后的版本内容进行合并生成新的 commit ,对比 reset ,revert 不会丢失 commit 信息,而 reset 会丢失 commit 信息。

这个可以应用到场景:A同学提交代码后并推送到远程,版本为a1;B同学这时拉取代码进行开发,A同学a1版本有问题,需要回退,于是A同学将a1版本回退并推送到远程。B同学开发后生成了B版本,提交到远程,这里B同学还是把A同学的a1版本提交上去了。现在我们就要把 a1 版本丢掉,并且保留B同学的 b1 版本。

总结:使用 git reset 丢失已经提交的 commit ,可以进行再编辑处理进行提交,使用git revert 丢掉 commit 的修改并生成新的 commit 进行提交,但是有丢掉版本的的前后版本在合并成新的 commit 时,容易生成冲突。

Tags:

最近发表
标签列表