如何高效的使用 Git

2022-06-17 12:06:07 字數 2916 閱讀 2458

**昨天還是執行好好的今天就不行了。

**被刪了。

突然出現了乙個奇怪的 bug,但是沒人知道怎麼回事。

如果你出現過上面的任何一種情況,那本篇文章就是為你準備的。

除了知道git add,git commit,git push之外,git 中還需要其他重要的技術需要掌握。長遠來看對我們是有幫助的。這裡我將向你展示 git 的最佳實踐。

當有多個開發者同時涉及到乙個專案時那麼就非常有必要正確使用 git 工作流。

這裡我將介紹一種工作流,它在乙個多人大型專案中將非常有用。

突然有一天,你成為了乙個專案的技術 leader 並計畫做出下乙個 facebook。在這個專案中你有三個開發人員。

alice:乙個開發小白。

bob:擁有一年工作經驗,了解基本開發。

john:三年開發經驗,熟練開發技能。

你:該項目的技術負責人。

master 分支應該始終和生產環境保持一致。

由於 master 和生產**是一致的,所以沒有人包括技術負責人能在 master 上直接開發。

真正的開發**應當寫在其他分支上。

當專案開始時,第一件事情就是建立發布分支。發布分支是基於 master 分支建立而來。

所有與本專案相關的**都在發布分支中,這個分支也是乙個以release/

開頭的普通分支。

比如這次的發布分支名為release/fb

可能有多個專案都基於同乙份**執行,因此對於每乙個專案來說都需要建立乙個獨立的發布分支。假設現在還有乙個專案正在並行執行,那就得為這個專案建立乙個單獨的發布分支比如release/messenger

需要單獨的發布分支的原因是:多個並行專案是基於同乙份**執行的,但是專案之間不能有衝突。

對於應用中的每乙個功能都應該建立乙個獨立的功能分支,這會確保這些功能能被單獨構建。

功能分支也和其他分支一樣,只是以feature/

開頭。

現在作為技術 leader,你要求 alice 去做 facebook 的登入頁面。因此他建立了乙個新的功能分支。把他命名為feature/login

。alice 將會在這個分支上編寫所有的登入**。

這個功能分支通常是基於 release(發布) 分支 建立而來。

bob 的任務為建立新增好友頁面,因此他建立了乙個名為feature/friendrequest

的功能分支。

john 則被安排構建訊息流,因此建立了乙個feature/newsfeed

的功能分支。

所有的開發人員都在自己的分支上進行開發,目前為止都很正常。

現在當 alice 完成了他的登入開發,他需要將他的功能分支feature/login

傳送給 release(發布) 分支。這個過程是通過發起乙個pull request完成的。

首先pull request不能和git pull搞混了。

開發人員不能直接向 release(發布) 分支推送**,技術 leader 需要在功能分支合併到 release(發布) 分支之前做好**審查。這也是通過pull request完成的。

alice 能夠按照如下 github 方式提交pull request

在分支名字的旁邊有乙個 「new pull request」 按鈕,點選之後將會顯示如下介面:

點選之後 alice 需要為這個pull request輸入名稱和描述,最後再點選 「create pull request」 按鈕。

同時 alice 需要為這個pull request指定乙個 reviewer。作為技術 leader 的你被選為本次pull request的 reviewer。

你完成**審查之後就需要把這個功能分支合併到 release(發布) 分支。

現在你已經把feature/login

分支合併到release/fb

,並且 alice 非常高興他的**被合併了。

bob 完成了他的編碼工作,同時向release/fb

分支發起了乙個pull request

因為發布分支已經合併了登入的**,這時**衝突發生了。解決衝突和合併**是 reviewer 的責任。在這樣的情況下,作為技術 leader 就需要解決衝突和合併**了。

現在 john 也已經完成了他的開發,同時也想把**合併到發布分支。但 john 非常擅長於解決**衝突。他將release/fb

上最新的**合併到他自己的功能分支feature/newsfeed

(通過 git pull 或 git merge 命令)。同時他解決了所有存在的衝突,現在feature/newsfeed

已經有了所有發布分支release/fb

的**。

最後 john 建立了乙個pull request,由於 john 已經解決了所有問題,所以本次pull request不會再有衝突了。

因此通常有兩種方式來解決**衝突:

一旦專案完成,發布分支的**需要合併回 master 分支,同時需要發布到生產環境。

因此生產環境中的**總是和 master 分支保持一致。同時對於今後的任何專案來說都是要確保 master **是最新的。

**:

如何高效的使用 Git

昨天還是執行好好的今天就不行了。被刪了。突然出現了乙個奇怪的 bug,但是沒人知道怎麼回事。如果你出現過上面的任何一種情況,那本篇文章就是為你準備的。除了知道 git add git commit git push 之外,git 中還需要其他重要的技術需要掌握。長遠來看對我們是有幫助的。這裡我將向你...

譯 如何高效的使用 Git

昨天還是執行好好的今天就不行了。被刪了。突然出現了乙個奇怪的 bug,但是沒人知道怎麼回事。如果你出現過上面的任何一種情況,那本篇文章就是為你準備的。除了知道git add,git commit,git push之外,git 中還需要其他重要的技術需要掌握。長遠來看對我們是有幫助的。這裡我將向你展示...

如何高效的使用STL

一些容器選用法則 1 如果程式要求隨機訪問元素,則應使用vector或deque容器 2 如果程式必須在容器的中間位置插入或刪除元素,則應採用list容器 3 如果程式不是在容器的中間位置,而是在容器首部或尾部插入或刪除元素,則應採用deque容器 4 如果只需要在讀取輸入時在容器的中間位置插入元素...