git rebase使用場景


1. 當前分支落后拉取后,整理commit,使得提交歷史為直線

git pull = git fetch + git merge

git pull --rebase = git fetch + git rebase

其實--rebase的目的只有兩個:

1.讓多個人在同一個分支開發的提交節點形成一條線,而不是多條線

2.讓你提交的commit在該分支的最前面

當push被reject的時候,可以用 git pull --rebase 拉取內容,將提交記錄保持一條直線

git pull --rebase時候,不能有modified狀態的文件,可以有Untracked files。modified狀態的文件,可以commit或者stash一下,通常的操作有:

$ git stash
$ git pull --rebase
$ git push
$ git stash pop

2. 別的分支合並到master,先整理為直線,再合並

1. 開辟特性分支 git checkbox -b feature
2. 在feature分支提交commit
3. 在feature git reabse -i 合並多個commit為一個,簡化提交歷史。這樣可以在git rebase時候減少沖突解決次數。
4. 在feature git pull origin master --rebase (相當於git fetch origin master, git rebase origin/master)
                                                                    將master最新commit同步到此分支,可能要手動解決沖突(合並過程中,異常退出vi窗口,
                                                                    用git rebase --edit-todo恢復,修改完,git rebase --continue 繼續下一步,
                                                                   忽略,git rebase --skip,終止,用git rebase —abort)
5. 切回master,git merge feature 將feature分支內容合並到master
6. git push提交master

如此,master的提交歷史將是一條直線。

3. 分支的多個連續commit復制到其他分支

git rebase [startpoint] [endpoint] --onto [branchName] //將多個連續commit添加到目標分支branchName, [startpoint] [endpoint]指定的是一個 前開后閉的區間

例如:

git rebase 90bc0045b^ 5de0da9f2 --onto master  //90bc0045b^后退一個commit,做成一個[90bc0045b, 5de0da9f2]閉區間

rebase完后,此時HEAD處於游離狀態,需要切換回目標分支,然后reset HEAD的位置

git checkout master

git reset --hard commitId //將分支的HEAD指向提交的id,切換回目標分支,會有提示,commitId使用提示中的最新id即可

4. commit合並

git rebase -i [startpoint] [endpoint] //[endpoint]可省略,將多個commit合並為一個,使用squash模式

例如:

git rebase -i HEAD~3 //往前3個commit,到現在,進行合並

5. commit拆分

git rebase -i 對指定commit的pick改為edit,進行編輯拆分

6. commit排序

git rebase -i 修改列表中commit順序即可

7. 改變分支起點

git checkout feature2

git rebase master

可以將feature2起點從別的分支改到master分支上

 

注意點:

主分支上不能rebase,如果如此,主分支的歷史將被篡改,不能看到原始的歷史記錄了

git pull時可以加上--rebase參數, 使之不產生Merge點, 保證了代碼的整潔,每次加rebase參數有點麻煩,

給指定分支設置為rebase方式,可以使用如下方式:

 $ git config branch.dev.rebase true

使用時將 "dev" 修改成您自己本地的分支名字,必須cd到工程目錄下,才能更改分支配置

所有的分支都應該用rebase

$ git config --global branch.autosetuprebase always

這樣新建的分支會設置為rebase,已經建好的還需單獨設置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM