git rebase使用場景

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

git pull = git fetch + git mergegit

git pull --rebase = git fetch + git rebaseide

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

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

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

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

git pull --rebase時候,不能有modified狀態的文件,能夠有Untracked files。modified狀態的文件,能夠commit或者stash一下,一般的操做有:htm

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

2. 別的分支合併到master,先整理爲直線,再合併blog

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完後,須要

git reset --hard commitId //將分支的HEAD指向提交的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,已經建好的還需單獨設置

 

參考:

https://baijiahao.baidu.com/s?id=1633418495146592435&wfr=spider&for=pchttps://www.liaoxuefeng.com/wiki/896043488029600/1216289527823648https://blog.csdn.net/nrsc272420199/article/details/85555911https://www.codercto.com/a/45325.html

相關文章
相關標籤/搜索