分支之間代碼同步


場景一:

          代碼已完全提交的分支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