事情起因:迭代结束后进行代码审查,我直接在本次已经结束的开发分支branch-1.3.1上对代码进行了优化,且本地commit了几次,后发现一些路由命名与文件不符,进行修改;
当前需求:支队最后一次commit的文件push即router/index.js;
初始思路:以为和svn一样,只要在当前文件夹下就只提交当前文件,结果将之前所有优化的内容都进行了提交。
出现的问题:导致了已经完结的分支branch-1.3.1的不纯洁性和不确定性;
解决方案:摘樱桃 cherry-pick
第一步:首先在当前本地的branch-1.3.1基础上创建一个新的分支,保存当前代码
git checkout branch-v1.3.1copy

第二步:将分支branch-v1.3.1回滚到当前迭代的版本
git reset --hard 139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96

到此为止分支branch-v1.3.1已经与远程保持一致
结果接下来进行了脑残行为进行了第三步
第三步:将之前优化的版本进行摘樱桃到branch-v1.3.1
切换到branch-v1.3.1分支,然后将branch-v1.3.1copy中优化的版本哈希值拷贝即实现摘樱桃
git cherry-pick 42249fd7ce9e83f154f48afb5d416e75f0b408ba

摘樱桃具体用法如下
//合并一次提交
git checkout B分支
git cherry-pick A的某次提交的哈希值(git log 可以看)
//如果合并A分支最近一次的提交也可以
git cherry-pick A
//合并多个提交
git cherry-pick A1 A2 //A1 A2是提交的哈希值(git log 可以看)
或
git cherry-pick A1.. A3 //从A1到A3都合并过来,不包含A1
或
git cherry-pick A1 ..A3 //包含A1
//其他命令
1、发生冲突后放弃合并,回到操作之前的状态
git cherry-pick abort
2、发生冲突后,退出cherry-pick 但不回到操作之前的状态
git cherry-pick --quit
第三步纯粹是走了回头路,我需要提交的内容依然无法提交
最终又重新回到起点,将branch-v1.3.1进行回滚,然后摘樱桃只摘修改路由的那个哈希值,然后进行提交
其他操作:
过程中创建新分支命名不混乱,又进行删除分支
// 删除本地分支
git branch -d branchv.1.3.1copy(分支名)
// 发现没成功
// 强制删除 (成功)
git branch -D branchv.1.3.1copy(分支名)
总结:此次翻车事件纯属操作不规范,当迭代结束后不应该修改当前分支代码,除非一些不大的操作且紧急,如果只是自己对代码进行优化应该新创建一个分支进行操作,待下一个迭代进行合并提交
网友评论