如何将本地master分支的修改同步到本地work分支?
解决误在master分支修改,同步到work分支的方案
别担心,这种误操作在日常开发里太常见了,我给你分两种场景来解决,你根据自己的实际情况选就行:
场景1:修改还没提交到master(工作区/暂存区有改动)
这种情况最简单,用stash临时保存改动再转移:
- 先在master分支把当前改动暂存起来:
这一步会把你所有未提交的改动存到Git的临时存储区,master分支会回到干净的状态。git stash - 切换到work分支:
git checkout work - 把暂存的改动恢复到work分支:
如果出现代码冲突,直接在本地解决冲突后,正常提交到work分支就可以了。git stash pop
场景2:修改已经提交到本地master分支(有新的commit)
如果已经把误修改的内容提交成了commit,我们可以用cherry-pick把这些commit转移到work分支,再回滚master的改动:
- 先切换到work分支:
git checkout work - 把master上的误提交commit复制到work分支:
- 先回到master分支(或者直接在work分支用
git log master)查看需要转移的commit哈希值:
输出里的一串7位字符就是commit hash,比如git log --oneline mastera1b2c3d 修复了XX问题 - 如果是单个commit,执行:
git cherry-pick a1b2c3d - 如果是连续的多个commit(比如最近3个),可以用范围:
git cherry-pick master~3..master
git cherry-pick --continue完成操作。 - 先回到master分支(或者直接在work分支用
- 回滚master分支的误提交:
切换回master分支,用reset撤销掉那些误提交的commit:
这里的git checkout master git reset --hard HEAD~NN是你要撤销的commit数量,比如误提交了2个就写HEAD~2。注意:reset --hard会彻底删除这些commit的改动,一定要确保已经把它们转移到work分支再执行!
额外提示
- 如果想查看stash里的内容,可以用
git stash list,如果想恢复指定的stash,用git stash apply stash@{0}(0是stash的序号) - 如果你的master分支已经推送到了远程仓库,那回滚的时候要格外小心,避免影响其他协作的人——不过你说的是本地分支,所以不用顾虑这个问题。
内容的提问来源于stack exchange,提问作者Max Wolfen
相关产品推荐
相关产品推荐

