一次git翻车事件

452 阅读2分钟

**事情起因:**迭代结束后进行代码审查,我直接在本次已经结束的开发分支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

5966191-79a5df6f493747be.png

**第二步:**将分支branch-v1.3.1回滚到当前迭代的版本

git reset --hard 139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96

5966191-79293a27a8cc0da5.png

到此为止分支branch-v1.3.1已经与远程保持一致 结果接下来进行了脑残行为进行了第三步

**第三步:**将之前优化的版本进行摘樱桃到branch-v1.3.1 切换到branch-v1.3.1分支,然后将branch-v1.3.1copy中优化的版本哈希值拷贝即实现摘樱桃

 git cherry-pick 42249fd7ce9e83f154f48afb5d416e75f0b408ba

5966191-efa6523b42cbaff8.png

摘樱桃具体用法如下

//合并一次提交
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都合并过来,不包含A1git 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(分支名)

**总结:**此次翻车事件纯属操作不规范,当迭代结束后不应该修改当前分支代码,除非一些不大的操作且紧急,如果只是自己对代码进行优化应该新创建一个分支进行操作,待下一个迭代进行合并提交