分支之间代码同步
场景一:
代码已完全提交的分支A,与代码已完全提交的分支B,需要将A全部同步到B
场景二:
代码已完全提交的分支A,与代码已完全提交的分支B,需要将A某个或某些commit提交同步到B
场景三:
尚未提交commit节点的分支A,将本次尚未提交commit的分支代码同步到分支B
场景一解决方案: merge 或 rebase 合并分支
// 比如将feature分支代码同步到master git checkout master git merge feature // 或者 git checkout feature git rebase master 注意:关于merge与rebase的区别,参考https://zhuanlan.zhihu.com/p/57872388
场景二解决方案: cherry-pick 复制某个或某些节点到当前分支
【基础命令】 git cherry-pick <commit id> // 将某次提交节点的代码,拉取过来,会在当前分支生成一个新的提交(新的commit ID); git cherry-pick <commit A> <commitB> // 将A、B两个提交应用到当前分支,会在当前分支生成两个对应的新提交(新的commit ID); git cherry-pick A^..B // 将A到B的所有提交,转移到当前分支,生成一系列对应的提交(新的commit ID); // ^是包含A,不带^则不包含A 【遇到冲突时,chery pick 会停下来】 选项一:解决冲突,然后将修改的代码加入暂存区(git add .)下一步让cherry-pick继续:git cherry-pick --continue 选项二:git cherry-pick --abort 放弃合并,代码会到操作前的样子
【拉取另一个仓库的提交节点】 git remote add target <gitUrl> //添加该库为远程仓库 git fetch target // 将远程代码抓取到本地 git log target/master // 获取远程仓库的哈希值 git cherry-pick <commitHash> //抓取对应的提交.
注意:cherry pick 类似 复制 + 粘贴
场景三解决方案:stash 临时保存,可跨分支,在代码未commit之前有效,否则只能用cherry-pick
【基本使用】 git stash save <save message> // 执行存储,添加备注,方便查找 // 只有git stash 也可以,但是查找时不方便识别 git stash apply // 应用某个存储,默认应用最近的第一个stash@{0} // 如果要应用其它个,使用mum指定第几个;git stash apply stash@{num} // 不会把当前应用的存储从存储列表中删除 git stash pop // 功能与apply相同,不同的是会把当前应用的存储从存储列表中删除 git stash list // 输出存储列表,查看存储里哪些 git stash show // 显示某个存储具体的改动 // 默认显示第一个,如果要显示其它个:git stash apply stash@{num} git stash drop stash@{num} // 从存储列表中删除某个存储,仅仅只是删除 git stash clear // 删除所有存储,清空存储列表 注意: 没有在git版本控制中的文件,是不能被git stash存储起开的,需要先git add;stash 类似 剪切 + 粘贴