基于 IDEA 完成 Git 指定分支回退
因為某些誤操作我們可能會提交好幾個錯誤的分支,我們希望將其回滾到正確的分支并提交,此時我們可能就會考慮通過如下步驟完成回滾:
- 通過Reset切換到正確分支。
- 通過push指令將切換結(jié)果提交。
只能說理想很豐滿,通過該復合操作后IDEA會提示Push Rejected進而導致分支回滾失?。?img src="https://s8.51cto.com/oss/202505/26/56c9f2453614913b2171038dd68ba4d40aabad.webp" data-type="inline" style="visibility: visible; width: 889px;">
1. 強制切換分支
這里筆者以自己近期調(diào)試的Nacos源碼為例,可以看到筆者提交了兩段錯誤注釋模擬提交錯誤分支:
對應的模擬代碼也很簡單,即通過注釋注明這是哪個錯誤的分支段:
/**
* 錯誤代碼2-分支提交
*/
@SpringBootApplication
@ComponentScan(basePackages = "com.alibaba.nacos", excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = {NacosTypeExcludeFilter.class}),
@Filter(type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class}),
@Filter(type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class})})
@ServletComponentScan
@EnableScheduling
public class Nacos {
public static void main(String[] args) {
SpringApplication.run(Nacos.class, args);
}
}
此時我們基于Reset操作將分支回滾到feat:注釋的分支上:
注意進行Reset的時候切換模式要選為hard即強制重置到指定的提交,并且會丟棄工作目錄和暫存區(qū)的所有更改:
此時我們的代碼就回到的正確的注釋狀態(tài):
/**
* Nacos starter.
* <p>
* Use @SpringBootApplication and @ComponentScan at the same time, using CUSTOM type filter to control module enabled.
* </p>
* @author nacos
*/
@SpringBootApplication
@ComponentScan(basePackages = "com.alibaba.nacos", excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = {NacosTypeExcludeFilter.class}),
@Filter(type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class}),
@Filter(type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class})})
@ServletComponentScan
@EnableScheduling
public class Nacos {
public static void main(String[] args) {
SpringApplication.run(Nacos.class, args);
}
}
2. 基于命令行強制提交
重點來了,在強行切換分支后,如果執(zhí)行push就會出現(xiàn)文章開頭的拒絕提示,此時我們就需要想辦法完成分支強制提交,對此,筆者的方式是基于terminal鍵入如下指令實現(xiàn)強行提交:
git push -f
從終端提示可以看到,terminal強制將當前版本提交到遠程倉庫:
3. 基于提交記錄驗證效果
此時查看我們的提交記錄可以發(fā)現(xiàn)所有的錯誤分支提交記錄也都消失,自此我們的版本回滾操作就完成了: