回退代碼到指定commit,并新增一個包含回退代碼記錄的提交
案例:新代碼已經(jīng)提交到了branchA誊薄,臨時需要緊急修復線上bug吞彤,但branchA分支代碼還不能發(fā)布。需要做一次回退亡资,并保留記錄方便后續(xù)操作持舆。
最新提交為 e1779c26e89231098a2e183e5795a4095ae22ac1
需要將代碼回退到 041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb
并生成一條新的提交包含回退的內(nèi)容
操作步驟:
git checkout 041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb # 回到歷史提交:041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb
git reset --mixed branchA # 把歷史帶到HEAD
git checkout branchA # 簽出HEAD
git add . # 添加修改
git commit # 把041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb和HEAD的 revert diff 提交
git push origin branchA # 推送代碼
最終效果:
- 新增一個提交:f108be2e84e198c235c87d3a652f1ce713040669,包含了回退的內(nèi)容
過程記敘
- 回到歷史提交
git checkout 041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb
注意:正在切換到 '041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb'又跛。
您正處于分離頭指針狀態(tài)碍拆。您可以查看、做試驗性的修改及提交效扫,并且您可以在切換
回一個分支時倔监,丟棄在此狀態(tài)下所做的提交而不對分支造成影響直砂。
如果您想要通過創(chuàng)建分支來保留在此狀態(tài)下所做的提交菌仁,您可以通過在 switch 命令
中添加參數(shù) -c 來實現(xiàn)(現(xiàn)在或稍后)。例如:
git switch -c <新分支名>
或者撤銷此操作:
git switch -
通過將配置變量 advice.detachedHead 設置為 false 來關閉此建議
HEAD 目前位于 041ee07df hackathon today 3 api develop
- 把歷史帶到HEAD
git reset --mixed branchA
重置后取消暫存的變更:
打印出變更文件列表
- 簽出HEAD
git checkout branchA
切換回目標分支, 通過 git status 可以看出文件差異列表
- 操作代碼提交
git add . # 添加修改
git commit -m 'revert 某版本' # 把041ee07dfa31d7ddaebb4c781aa7bbef99ced2fb和HEAD的 revert diff 提交
git push origin branchA # 推送代碼
- 查看結果
git log
commit f108be2e84e198c235c87d3a652f1ce713040669 (HEAD -> branchA, origin/branchA)
Author: echo <449211678@qq.com>
Date: Thu Jan 02 17:02:36 2021 +0800
revert 某版本
加塞做完如何恢復
假設加塞完成后最新提交為 a29b52579fc417c2ac0f514c0f9d89f81b218392
找到 上一次回滾前的id: e1779c26e89231098a2e183e5795a4095ae22ac1
git checkout e1779c26e89231098a2e183e5795a4095ae22ac1 # 回到歷史提交:e1779c26e89231098a2e183e5795a4095ae22ac1
git reset --mixed branchA # 把歷史帶到HEAD
git checkout branchA # 簽出HEAD
git add . # 添加修改
git commit -m 'revert new code' # 把e1779c26e89231098a2e183e5795a4095ae22ac1和HEAD的 revert diff 提交
git push origin branchA # 推送代碼