聊聊Gitlab中怎麼優雅的拉取和合並程式碼

2023-03-28 22:00:29

Gitlab中怎麼優雅的拉取和合並程式碼?下面本篇文章給大家介紹一下Gitlab中拉取和合並程式碼的方法,希望對大家有所幫助!

pull or fetch

拉取程式碼的操作有兩種形式,git pullgit fetch,那麼這兩種有什麼區別呢?

讓我們先來看看一個架構圖

圖中展示一個完整的git流程,為了更清晰的瞭解每個區域,我們下來解釋一下他們的功能:

  • 工作區(working directory), 簡言之就是你工作的區域。對於git而言,就是的本地工作目錄。
  • 暫存區(stage area, 又稱為索引區index), 是把修改提交版本庫前的一個過渡階段。在工作目錄下.git的目錄裡面有個index檔案,儲存著關於暫存區的內容。git add命令將工作區內容新增到暫存區。
  • 本地倉庫(local repository), 版本控制系統的倉庫,存在於本地。當執行git commit命令後,會將暫存區內容提交到倉庫之中。.git/objects目錄中存放了每一個提交的記錄,而在.git/refs目錄下存放的是分支資訊和tag資訊。
  • 遠端版本庫(remote repository), 與本地倉庫概念基本一致,不同之處在於一個存在遠端,可用於遠端共同作業,一個卻是存在於本地。通過push/pull可實現本地與遠端的互動;
  • 遠端倉庫副本, 可以理解為存在於原生的遠端倉庫快取。當使用git fetch拉取遠端程式碼倉庫的時候,就相當於在本地有一個遠端倉庫的副本,你可以選擇把這個副本合併到本地倉庫中。

從圖中可以看出來,當我們使用git pull拉取程式碼的時候,是直接合併到了本地分支,而使用git fetch拉取程式碼的時候,會先在本地生成一個遠端倉庫的副本,然後使用git merge或者git rebase合併到本地分支。

既然能直接git pull何必多次一舉呢?試想一個場景,當你想合併別人的程式碼,又不知道人家改了什麼東西,是否能夠跟你程式碼合併到一起,這時候通過git fetch就能很輕易的實現。git fetch以後實際並不會立馬跟本地分支立馬合併,在git fetch以後,會顯示如下圖:

上圖顯示了遠端新增了一個test2分支,在test分支上多了個一個提交資訊,這時候在.git/refs/remotes/origin目錄下可以看到多了一個test2分支。

使用git log origin/test,可以檢視具體的提交資訊

如果想檢視提交的內容是啥,只能通過新建一個分支,

git checkout -b test-origin
git merge test
登入後複製

講到這裡,相信你已經明白了git pullgit fetch的區別了吧。總結一下:

  • git fetch 更安全,更人性化

  • git pull 更激進,破壞性更強

一般的Leader在管理專案的時候都是習慣性的使用git fetch檢視最近新增了哪些分支,做了哪些修改,從而對專案做出更好的把控。

merge or rebase

上面提到的合併操作,一般我們直接是通過git merge <分支名>去合併某個分支的程式碼。先看看直接使用git merge的問題,有一條看著很不順眼的Merge branch資訊,如下圖所示:

下圖是合併後的一個流程圖,當我們在main分支拉一個dev進行開發,這時候兩個分支都有提交記錄,當我們合併的時候,正常情況應該是在main的基礎上,直接合並,而不是多了一個C7的提交資訊,也就是上面提到的Merge branch,這顯然是一個很不合理的現象(當然這也不影響git正常工作)。

那如何解決這個現象導致的問題呢?答案就是git rebase,俗稱變基。

下面我們先來看看變基以後git分支是什麼樣的了

可以看到,當dev分支更新之後,它會指向這些新建立的提交(commit),而那些老的提交會被丟棄。

範例操作

上面講了這麼多,現在讓我們來實際操作一下。

場景:遠端有一個main分支上有內容更新,現在我們需要把更新的內容合併到本地dev分支上,然後push到遠端dev分支,當前分支實在dev分支。

簡單實現(就是很樸實無華):

# 拉取main分支程式碼
git fetch origin main
# 合併到dev
git rebase origin/main
登入後複製

上面的git rebase還有個快捷的操作,直接一行命令搞定

# 拉取test分支程式碼合併到dev
git pull --rebase origin test
登入後複製

如果你不想每次都新增rebase,可以在終端中輸入下面的命令:

git config --global pull.rebase true
登入後複製

這個設定就是告訴git在每次pull前先進行rebase操作

其他命令參考

# 檢視本地分支
git branch
# 檢視遠端分支
git branch -r
# 檢視所有分支
git branch -a

# 拉取所有遠端分支程式碼
git fetch 
# 拉取origin源上所有分支程式碼
git fetch origin
# 拉取orign源上main分支程式碼
git fetch origin main

# 拉取遠端分支到新建的一個本地分支並
git checkout -b newBrach origin/master
# 合併遠端分支到本地
git pull --rebase origin master

# 檢視提交紀錄檔
git log --oneline
# 檢視某個人提交的紀錄檔
git log --author=xiumubai --oneline
# 檢視某個檔案提交的記錄
git blame README.md
# 檢視某次提交的內容
git show <commitid>
# 檢視最近幾次的提交

git log -p -n
登入後複製

(學習視訊分享:)

以上就是聊聊Gitlab中怎麼優雅的拉取和合並程式碼的詳細內容,更多請關注TW511.COM其它相關文章!