以master為准創建分支dev_A 開發,開發過程中,master主分支有新的功能被提交進來,需要將這部分代碼align到dev_A的版本.
這里僅列舉這一個場景,rebase 還可以修改commit message 請參照我的另一篇文章
理解rebase
rebase 字典翻譯為變基。我的理解是:改變基准,以早期的master為基准創建的dev_A,后來master代碼有變,我們需要重新以最新的master為基准同步代碼,可以理解成改變dev_A的基准版本為最新的master,這樣是不是好理解一些呢?
操作步驟
1 git切換至當前開發版本
git checkout dev_A
切換到當前開發版本是,也就是 dev_A
2 list需要變基到的branch,不一定是master
git branch -a
查看所有分支,根據列表中的branch 基准branch
3 執行rebase變基
git rebase master
這里以master為基准,如果是其他版本,git rebase branchname
如果dev_A中存在沒有提交的代碼,git會提示:
can't rebase : you have unstaged changes.
Please stash or commit them .
可以根據自己的情況選擇執行stash 或者 commit,這里stash為例:
git stash
stash暫存本地倉庫,rebase 完成之后再使用 git stash pop 取回這一部分代碼。
如果沒有沖突的情況
比如dev_A做的是A模塊,master 代碼變更進去的是B模塊,也假設沒有其他共同使用的文件
git rebase master 這一句命令就已經完成了我們的rebase操作,我們dev_A 已經包含了master后來更新進去的文件。
存在沖突的情況
這里我們着重說明存在沖突的情況
解決沖突
git 會提示我們有哪些文件沖突,我們可以在代碼編輯器中查看沖突標識符
<<<<<HEAD
HEADcode
=======
Othercode
>>>>>>>>>>
兩個沖突的版本用連續的等號=隔開,便於對比兩個版本代碼,手動修改使用哪個版本的代碼。
標記沖突已解決
git add .
修改完成之后 使用git add . 告訴git 沖突已被全部解決,也可以一個文件一個文件解決之后使用 git add filepath, 這樣比較麻煩
繼續rebase 操作
git rebase --continue
提交到遠程分支
git pull -f
master的代碼已經被同步到當前本版dev_A的版本庫了。
如果有stash的文件,使用如下命令取回代碼
git stash pop