git rebase 使用詳解
rebase
本地兩個分支 一個我的分支 test 一個主分支 master
現在我修改的部分要合併到 master 上,可以有兩種選擇 merge 或者 rebase
兩者的最後得到的結果是一樣的,但是區別是 rebase 一個兩個分支 就各位了一個分支,test合併前所有的 patch也就是commit 消失了
而merge 則還是兩個分支,只不過在merge後這個點交匯
圖示
merge
rebase
為了讓分支樹看起來更簡化,所以我們選用rebase
如何rebase 呢?
首先我的原生程式碼庫都不是最新的,所以先從遠端倉庫pull一下
git checkout master`
git pull
然後 開始和test分支rebase
git checkout test
git rebase master
這個時候就開始rebase 了,一般情況下rebase都是會有衝突的,詳細檢視衝突可以用命令git status
然後就會顯示哪個檔案有衝突,然後開啟有衝突的哪個檔案,會發現有一些“<<<<<<<”, “=======”, “>>>>>>>” 這樣的符號。
“<<<<<<<” 表示衝突程式碼開始
“=======” 表示test與master衝突程式碼分隔符
“>>>>>>>" 表示衝突程式碼的結束
<<<<<<<
所以這一塊區域test的程式碼
=======
這一塊區域master的程式碼
>>>>>>>
rebase 和 merge的另一個區別是rebase 的衝突是一個一個解決,如果有十個衝突,先解決第一個,然後用命令
git add -u
git rebase --continue
繼續後才會出現第二個衝突,直到所有衝突解決完,而merge 是所有的衝突都會顯示出來。
另外如果rebase過程中,你想中途退出,恢復rebase前的程式碼則可以用命令
git rebase --abort
所以rebase的工作流就是
git rebase
while(存在衝突) {
git status
找到當前衝突檔案,編輯解決衝突
git add -u
git rebase --continue
if( git rebase --abort )
break;
}
最後衝突全部解決,rebase成功!!
然後我需要把本地的test 分支push 到遠端test分支上然後再給遠端的master分支 PR。
但是git push 以後總是提示不讓我push 百度了一下發現原因:
比如遠端倉庫的程式碼 A 和 B 都 clone 了一份,然後B修改了x.txt檔案後push到了倉庫, 這個時候 A 就不能直接push了,因為A的x.txt檔案沒有修改,所以此時A應該把遠端的倉庫pull一下,merge掉x.txt檔案的衝突,才能push所以我這裡就犯了一個錯誤,應該在rebase 前,先把原來本地的test分支push到遠端,否則rebase之後就相當於兩個人一個人改了檔案。另一個人就無法push了。
所以這裡需要pull一下
git pull
因為是merge所以這裡會出現所有的conflict
git status
檢視 編輯衝突後再 git pull一下,就合併了。
最後把本地分支test push到遠端分支
git pull
git push origin test
最後PR(pull request)即可。
總結
rebase 工作流:
git rebase
while(存在衝突) {
git status
找到當前衝突檔案,編輯解決衝突
git add -u
git rebase --continue
if( git rebase --abort )
break;
}
merge工作流 :
1.git pull (或fetch && merge)
2.編輯衝突檔案
3.git pull
相關文章
- git rebase --onto詳解Git
- git rebase vs git merge詳解Git
- 詳解git rebase,讓你走上git大神之路Git
- git分支管理--rebase&merge詳解Git
- git rebase的使用Git
- [Git] Git整理(四) git rebase 的使用Git
- Git應用詳解第九講:Git cherry-pick與Git rebaseGit
- Git rebase 與 Git merge 的使用Git
- git 命令之git rebase 用法&git rebase介紹Git
- git-rebase進階使用Git
- 學會使用 git-rebaseGit
- [Git]rebaseGit
- Git -- RebaseGit
- 使用 git rebase 提高 PR 質量Git
- git merge & git rebaseGit
- git rebase masterGitAST
- git rebase 流程Git
- Git——rebase命令Git
- git rebase -iGit
- git rebase命令Git
- git使用詳解Git
- git:rebase(變基)的使用和理解Git
- git學習之git rebaseGit
- git rebase 和 git mergeGit
- git rebase後出現(master|REBASE 1/10)的解決辦法GitAST
- 你根本不懂rebase-使用rebase打造可讀的git graphGit
- 如何理解git rebase?Git
- git在工作中正確的使用方式----git rebase篇Git
- 簡單對比git pull和git pull --rebase的使用Git
- Git使用進階:git rebase拆分過去的某次提交Git
- Git 操作之rebase、squashGit
- 【Git】rebase 用法小結Git
- 圖解 Git 基本命令 merge 和 rebase圖解Git
- Git基礎命令之git rebase命令Git
- git merge 和 git rebase 小結Git
- GIT使用過程出現(master|REBASE 1/10)GitAST
- git revert .vs. git reset .vs. git rebaseGit
- 徹底搞懂 Git-RebaseGit