場景一:
代碼已完全提交的分支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 類似 剪切 + 粘貼