<menuitem id="a2222"></menuitem>
<ins id="a2222"><video id="a2222"></video></ins>
  1. <output id="a2222"><nobr id="a2222"></nobr></output>

    <tr id="a2222"><small id="a2222"><acronym id="a2222"></acronym></small></tr>

    專注IT教育14年 全國咨詢/投訴熱線:400-8080-105
    動力節點LOGO圖
    始于2009,口口相傳的IT黃埔軍校
    首頁 hot資訊 一文讀懂Git管理分支

    一文讀懂Git管理分支

    更新時間:2021-12-23 11:16:20 來源:動力節點 瀏覽821次

    分支操作允許創建另一條開發線。我們可以使用此操作將開發過程分為兩個不同的方向。例如,我們發布了一個 6.0 版本的產品,我們可能想要創建一個分支,以便 7.0 功能的開發可以與 6.0 錯誤修復分開。

    創建分支

    Tom 使用 git branch <branch name>命令創建一個新分支。我們可以從現有分支創建一個新分支。我們可以使用特定的提交或標簽作為起點。如果未提供任何特定的提交 ID,則將以 HEAD 為起點創建分支。

    [jerry@CentOS src]$ git branch new_branch
    [jerry@CentOS src]$ git branch
    * master
    new_branch

    創建了一個新分支;Tom 使用 git branch 命令列出可用的分支。Git 在當前簽出的分支之前顯示一個星號。

    創建分支操作的圖示如下所示

    在分支之間切換

    Jerry 使用 git checkout 命令在分支之間切換。

    [jerry@CentOS src]$ git checkout new_branch
    Switched to branch 'new_branch'
    [jerry@CentOS src]$ git branch
    master
    * new_branch

    創建和切換分支的快捷方式

    在上面的例子中,我們分別使用了兩個命令來創建和切換分支。Git 為checkout 命令提供了-b選項;此操作創建一個新分支并立即切換到新分支。

    [jerry@CentOS src]$ git checkout -b test_branch
    Switched to a new branch 'test_branch'
    [jerry@CentOS src]$ git branch
    master
    new_branch
    * test_branch

    刪除一個分支

    可以通過在 git branch 命令中提供 –D 選項來刪除分支。但在刪除現有分支之前,切換到另一個分支。

    Jerry 目前在test_branch 上,他想刪除該分支。所以他切換分支并刪除分支,如下所示。

    [jerry@CentOS src]$ git branch
    master
    new_branch
    * test_branch
    [jerry@CentOS src]$ git checkout master
    Switched to branch 'master'
    [jerry@CentOS src]$ git branch -D test_branch
    Deleted branch test_branch (was 5776472).

    現在,Git 將只顯示兩個分支。

    [jerry@CentOS src]$ git branch
    * master
    new_branch

    重命名分支

    Jerry 決定在他的字符串操作項目中添加對寬字符的支持。他已經創建了一個新分支,但是分支名稱不合適。因此,他通過使用-m選項后跟舊分支名稱和新分支名稱來更改分支名稱。

    [jerry@CentOS src]$ git branch
    * master
    new_branch
    [jerry@CentOS src]$ git branch -m new_branch wchar_support

    現在, git branch 命令將顯示新的分支名稱。

    [jerry@CentOS src]$ git branch
    * master
    wchar_support

    合并兩個分支

    Jerry 實現了一個函數來返回寬字符串的字符串長度。新代碼將顯示如下

    [jerry@CentOS src]$ git branch
    master
    * wchar_support
    [jerry@CentOS src]$ pwd
    /home/jerry/jerry_repo/project/src
    [jerry@CentOS src]$ git diff

    上面的命令產生以下結果

    t a/src/string_operations.c b/src/string_operations.c
    index 8ab7f42..8fb4b00 100644
    --- a/src/string_operations.c
    +++ b/src/string_operations.c
    @@ -1,4 +1,14 @@
    #include <stdio.h>
    +#include <wchar.h>
    +
    +size_t w_strlen(const wchar_t *s)
    +
    {
       +
       const wchar_t *p = s;
       +
       +
       while (*p)
       + ++p;
       + return (p - s);
       +
    }

    測試后,他提交并將他的更改推送到新分支。

    [jerry@CentOS src]$ git status -s
    M string_operations.c
    ?? string_operations
    [jerry@CentOS src]$ git add string_operations.c
    [jerry@CentOS src]$ git commit -m 'Added w_strlen function to return string lenght of wchar_t
    string'
    [wchar_support 64192f9] Added w_strlen function to return string lenght of wchar_t string
    1 files changed, 10 insertions(+), 0 deletions(-)

    請注意,Jerry 正在將這些更改推送到新分支,這就是他使用分支名稱wchar_support而不是master分支的原因。

    [jerry@CentOS src]$ git push origin wchar_support   <??? Observer branch_name

    上述命令將產生以下結果。

    Counting objects: 7, done.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (4/4), 507 bytes, done.
    Total 4 (delta 1), reused 0 (delta 0)
    To gituser@git.server.com:project.git
    * [new branch]
    wchar_support -> wchar_support

    提交更改后,新分支將如下所示

    Tom 很好奇 Jerry 在他的私有分支里做了什么,他檢查了wchar_support分支的日志。

    [tom@CentOS src]$ pwd
    /home/tom/top_repo/project/src
    [tom@CentOS src]$ git log origin/wchar_support -2

    上述命令將產生以下結果。

    commit 64192f91d7cc2bcdf3bf946dd33ece63b74184a3
    Author: Jerry Mouse <jerry@tutorialspoint.com>
    Date: Wed Sep 11 16:10:06 2013 +0530
    Added w_strlen function to return string lenght of wchar_t string
    commit 577647211ed44fe2ae479427a0668a4f12ed71a1
    Author: Tom Cat <tom@tutorialspoint.com>
    Date: Wed Sep 11 10:21:20 2013 +0530
    Removed executable binary

    通過查看提交消息,Tom 意識到 Jerry 為寬字符實現了 strlen 函數,并且他希望在 master 分支中具有相同的功能。他沒有重新實現,而是決定通過將他的分支與主分支合并來獲取 Jerry 的代碼。

    [tom@CentOS project]$ git branch
    * master
    [tom@CentOS project]$ pwd
    /home/tom/top_repo/project
    [tom@CentOS project]$ git merge origin/wchar_support
    Updating 5776472..64192f9
    Fast-forward
    src/string_operations.c | 10 ++++++++++
    1 files changed, 10 insertions(+), 0 deletions(-)

    合并操作后,主分支將出現如下

    現在,分支wchar_support已與主分支合并。我們可以通過查看提交消息或查看對 string_operation.c 文件所做的修改來驗證它。

    [tom@CentOS project]$ cd src/
    [tom@CentOS src]$ git log -1
    commit 64192f91d7cc2bcdf3bf946dd33ece63b74184a3
    Author: Jerry Mouse 
    Date: Wed Sep 11 16:10:06 2013 +0530
    Added w_strlen function to return string lenght of wchar_t string
    [tom@CentOS src]$ head -12 string_operations.c

    上述命令將產生以下結果。

    #include <stdio.h>
    #include <wchar.h>
    size_t w_strlen(const wchar_t *s)
    {
       const wchar_t *p = s;
       while (*p)
          ++p;
       return (p - s);
    }

    測試后,他將他的代碼更改推送到主分支。

    [tom@CentOS src]$ git push origin master
    Total 0 (delta 0), reused 0 (delta 0)
    To gituser@git.server.com:project.git
    5776472..64192f9 master ?> master

    變基分支

    Git rebase 命令是一個分支合并命令,但不同的是它修改了提交的順序。

    Git merge 命令嘗試將來自其他分支的提交放在當前本地分支的 HEAD 之上。例如,你的本地分支提交了 A->B->C->D 并且合并分支提交了 A->B->X->Y,那么 git merge 會將當前本地分支轉換為類似 A-> B->C->D->X->Y

    Git rebase 命令試圖找出當前本地分支和合并分支之間的共同祖先。然后通過修改當前本地分支中的提交順序將提交推送到本地分支。例如,如果您的本地分支提交了 A->B->C->D 并且合并分支提交了 A->B->X->Y,那么 Git rebase 會將當前本地分支轉換為類似 A- >B->X->Y->C->D。

    當多個開發人員在單個遠程存儲庫上工作時,您無法修改遠程存儲庫中的提交順序。在這種情況下,您可以使用 rebase 操作將本地提交置于遠程存儲庫提交之上,并且您可以推送這些更改。如果您想了解更多相關知識,可以來關注一下動力節點的Java在線學習,里面的課程內容豐富,通俗易懂,比較適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。

    免費課程推薦 >>
    技術文檔推薦 >>
    返回頂部
    欧美另类人人干

    <menuitem id="a2222"></menuitem>
    <ins id="a2222"><video id="a2222"></video></ins>
    1. <output id="a2222"><nobr id="a2222"></nobr></output>

      <tr id="a2222"><small id="a2222"><acronym id="a2222"></acronym></small></tr>