git merge
最開始的時候,我還是習慣用git merge
這個命令的,但是,後來發現很多人其實也用git rebase
,所以,就想看看為啥有這兩種用法的區別,到底區別在**?
先來看看git merge
的用法。
我們首先在master的基礎上新建分支,然後做一些修改,並且提交。
git checkout -b feat/work
vim service.go
git add .
git commit -m '提交feat/work'
vim service2.go
git add .
git commit -m '提交新增修改'
通過上面的操作,我們在master
的基礎上進行了分支feat/work
建立,並且進行了兩次提交,所以,目前的git分支情況應該是下面這樣的。
好了,這個時候,這個分支已經開發完了,那麼,我們就需要合併分支了,我們進行下面的git merge操作。
但是,這個時候,別人開發完了他的分支之後,也進行了提交,並且merge到了master,這個時候情況如下圖。
這個時候,我們再進行merge 的時候就會發現,會有conflict需要我們解決。
git merge
解決衝突的方式是一次全部進行遞迴合併,如果有衝突的檔案進行提示,然後需要我們進行修改。修改完了之後,我們再用git add
和git commit
提交就ok了。
git merge master
我們進行了合併master的操作,這時的情況應該是這樣的。
然後,我們再進行master合併feat/work
進行快進就可以完成整個過程了。
通過上面的這個例項我們會發現,如上圖git merge
的操作,是會保留在分支上的所有的提交記錄的,這樣的好處就是可以保留所有的歷史的提交的記錄,方便檢視歷史的log。
ok,下面我們再來看看git rebase的操作是怎麼樣的。git rebase
終於等到你,我們來看看git rebase
是什麼神仙。
同樣的,我們還是建立乙個新的分支,然後進行一些操作。
git checkout -b feat/work //新建分支
vim service3.go
git add .
git commit -m '提交修改'
同時,別人也新建了乙個新的分支進行開發,相當於有兩個分支同時進行開發。
git checkout -b feat/work2 //新建分支
vim service3.go
git add .
git commit -m '提交修改'
我們同時對乙個檔案中的乙個方法進行修改,這個時候,然後,另外乙個小夥伴進行了merge操作,這個時候的git情況就變成下面這樣的了。
這個時候我們進行git rebase會發現有衝突,所以我們需要解決衝突,前面說過,git merge解決衝突是遞迴合併,然後有衝突的檔案全部顯示出來,然後自己去解決。而git rebase的解決衝突方式則是一次解決乙個,解決完乙個再下乙個。
比如,我們解決第乙個,解決完了之後,我們用先用git status
檢視目前的git情況,然後再新增剛剛解決的衝突git add u
。
git status //檢視git狀態
git add -u
接著,我們用git rebase --continue
繼續解決衝突。如此反覆,最終把全部衝突解決。
另外,如果想中途退出,可以用git rebase --abort
命令,退出rebase,這樣就會回到rebase之前。
rebase的解決衝突過程可以用如下圖表示。
rebase的整個過程,首先會類似將c5、c6複製乙份,然後放入到最新的master之後。
然後,再將feat/work
分支上的commit全部刪除。
整個過程可以用如下圖表示。
所以說,rebase會將原來的分支的commit的全部清除掉。小小對比
通過這兩個操作的過程,我們會發現這兩個命令的區別。第乙個,git merge
一次全部解決衝突,git rebase
一次解決乙個,這種方式會發現,git rebase
一次解決乙個,不容易漏掉,思路清晰,而git merge
的話更快解決。第二個,git merge
會保留合併之前分支的所有提交,歷史記錄更加完整,而git rebase
則是直接放到master之後,會清除分支上的所有commit記錄,這樣好處就是可以使得整個master更加整潔。
那到底用哪乙個呢,其實沒有最好的辦法,兩種都是可以的,看你怎麼選擇,一種可以記錄歷史分支的提交,另外一種則不記錄,但是使得master更加清晰,所以,就看自己的取捨。git rebase缺陷
最主要的意思就是說,我們在用git rebase
的時候,需要注意一點:只對尚未推送或分享給別人的本地修改執行變基操作清理歷史, 從不對已推送至別處的提交執行變基操作。
具體的問題描述可以看看git的官方文件,非常詳細,不過多描述:
最常用的git操作
1.新建並切換到本地分支 git checkout b dev2.本地 和遠端 的的關聯 git pull origin dev3.在本地新建分支 git checkout b dev4.把本地分支推到遠端分支 git push origin dev5.更新遠端分支 git remote updat...
最常用的git命令彙總
1 git init 用途 將本地開啟的資料夾變成git可管理的倉庫,執行後該資料夾裡會多乙個.git資料夾,它是git用來跟蹤和管理版本庫的。2 git status 用途 檢視當前狀態 3 git add 用途 把專案新增到倉庫,如果執行 git add add和 之間有空格 命令,表示把該目錄...
git最常用的操作命令
0.一無所有。1.2.公司或者個人都會先在伺服器上建好乙個 倉庫,如 gitlab,碼雲或者在自己租的伺服器上搭乙個 倉庫。3.進入d盤,右鍵滑鼠選中git bash here即可開啟git shell視窗,在裡面就可以寫cmd or git 命令。先來轉殖遠端伺服器的 執行 git clone 開...