分支之间代码同步

场景一:

          代码已完全提交的分支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 类似 剪切 + 粘贴
原文地址:https://www.cnblogs.com/caofeng11/p/15426935.html