分支之间代码同步


场景一:

          代码已完全提交的分支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 类似 剪切 + 粘贴

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM