更新時(shí)間:2022年06月23日09時(shí)35分 來(lái)源:傳智教育 瀏覽次數(shù):
1. 解決思路
? 在實(shí)際開發(fā)場(chǎng)景中,代碼是基于主分支(master)發(fā)布到線上的。團(tuán)隊(duì)開發(fā)過(guò)程中,可能會(huì)有多個(gè)人的代碼在主分支進(jìn)行提交或合并。那么在線上出現(xiàn)bug,需要做代碼回滾時(shí),如果別人沒有最新的提交,那么我們可以用reset進(jìn)行版本回退,否則,就可以考慮使用revert命令進(jìn)行還原修改,不要影響到別人的提交。
代碼回滾的思路是比較簡(jiǎn)單的: 首先查看代碼提交日志,日志中會(huì)展示已提交代碼的各個(gè)版本, 然后回滾到對(duì)應(yīng)的版本即可。我們可以直接使用git命令來(lái)完成操作, 也可以使用開發(fā)工具IDEA自身集成的Git可視化插件。
2. 動(dòng)手實(shí)踐
2.1 使用git命令
1)查看提交日志
首先,用 `git reflog` 查看代碼提交日志,如下圖所示:
這里左側(cè)是主要演示代碼,右側(cè)是對(duì)應(yīng)的git操作,演示文本中的3行代碼分別對(duì)應(yīng)3次提交。
2)代碼回滾
假設(shè)上述的案例中, 第3次也是最后一次提交有bug,那么我們想要回滾到第2次提交,該如何操作呢?有以下兩種方案:
第一種方案
使用`git reset --hard commit_id` 回退到指定的版本,如下圖所示:
這里的commit_id就是剛才查看到的日志中每個(gè)版本的標(biāo)識(shí), 執(zhí)行完此命令代碼就會(huì)回滾到對(duì)應(yīng)的版本。
補(bǔ)充: 開發(fā)中也常使用 `git reset --hard HEAD^` 來(lái)回滾到上一個(gè)版本。
這里的HEAD是指向當(dāng)前版本的指針,HEAD^表示上個(gè)版本,HEAD^^表示上上個(gè)版本。
值得一提的是,reset回滾是將代碼從第3個(gè)版本徹底回退到第2個(gè)版本。在當(dāng)前代碼中, 第3個(gè)版本的代碼不會(huì)得到任何保留。如果我們想回退到第2個(gè)版本,但是還要保留第3個(gè)版本中的部分代碼,那么可以使用第二種方案。
第二種方案
使用`git revert -n commit_id` 回退到指定的版本,如下圖所示:
因?yàn)閞evert撤銷操作, 會(huì)保留第3個(gè)版本的代碼,而第3個(gè)版本的代碼和第2個(gè)版本的代碼有沖突,那么就需要手動(dòng)解決沖突之后,再次提交, 如下圖所示:
這樣操作的含義,就是回退到版本2,但是這個(gè)過(guò)程中保留了版本3的代碼,手動(dòng)修改再次提交就是最新的代碼了。
2.2 使用IDEA自帶的git插件
IDEA自帶的git插件可以使用命令(跟上面的操作一樣),也可以支持可視化操作,這里主要演示可視化操作。
1)查看提交日志
首先,右單機(jī)項(xiàng)目,通過(guò)git菜單,查看提交日志,如下圖
日志的展示區(qū)域,如下圖:
這里的DemoController是主要的演示代碼,下面是對(duì)應(yīng)的git提交日志,演示代碼中的3行代碼分別對(duì)應(yīng)3次提交。
2)代碼回滾
假設(shè)上述的案例中, 第3次也是最后一次提交有bug,那么我們想要回滾到第2次提交,該如何操作呢?有以下兩種方案:
備注: 接下來(lái)的操作思路跟git命令操作思路完全一樣,只是我們用idea中g(shù)it可視化工具重新演示一下。
第一種方案
reset方式回滾代碼, 操作如下:
結(jié)果:
第二種方案
revert方式回滾代碼,操作如下:
結(jié)果:
北京校區(qū)