基于 IDEA 完成 Git 指定分支回退
因?yàn)槟承┱`操作我們可能會(huì)提交好幾個(gè)錯(cuò)誤的分支,我們希望將其回滾到正確的分支并提交,此時(shí)我們可能就會(huì)考慮通過如下步驟完成回滾:
- 通過Reset切換到正確分支。
- 通過push指令將切換結(jié)果提交。
只能說理想很豐滿,通過該復(fù)合操作后IDEA會(huì)提示Push Rejected進(jìn)而導(dǎo)致分支回滾失敗:
1. 強(qiáng)制切換分支
這里筆者以自己近期調(diào)試的Nacos源碼為例,可以看到筆者提交了兩段錯(cuò)誤注釋模擬提交錯(cuò)誤分支:
對(duì)應(yīng)的模擬代碼也很簡(jiǎn)單,即通過注釋注明這是哪個(gè)錯(cuò)誤的分支段:
/**
* 錯(cuò)誤代碼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);
}
}
此時(shí)我們基于Reset操作將分支回滾到feat:注釋的分支上:
注意進(jìn)行Reset的時(shí)候切換模式要選為hard即強(qiáng)制重置到指定的提交,并且會(huì)丟棄工作目錄和暫存區(qū)的所有更改:
此時(shí)我們的代碼就回到的正確的注釋狀態(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. 基于命令行強(qiáng)制提交
重點(diǎn)來了,在強(qiáng)行切換分支后,如果執(zhí)行push就會(huì)出現(xiàn)文章開頭的拒絕提示,此時(shí)我們就需要想辦法完成分支強(qiáng)制提交,對(duì)此,筆者的方式是基于terminal鍵入如下指令實(shí)現(xiàn)強(qiáng)行提交:
git push -f
從終端提示可以看到,terminal強(qiáng)制將當(dāng)前版本提交到遠(yuǎn)程倉庫:
3. 基于提交記錄驗(yàn)證效果
此時(shí)查看我們的提交記錄可以發(fā)現(xiàn)所有的錯(cuò)誤分支提交記錄也都消失,自此我們的版本回滾操作就完成了: