**事情起因:**迭代结束后进行代码审查,我直接在本次已经结束的开发分支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(分支名)
**总结:**此次翻车事件纯属操作不规范,当迭代结束后不应该修改当前分支代码,除非一些不大的操作且紧急,如果只是自己对代码进行优化应该新创建一个分支进行操作,待下一个迭代进行合并提交