• GIT使用—分支与合并


    一、分支名

    • 分支名不能以斜线结尾
    • 分支名不能以减号开头
    • 以斜杠分割的组件不能以点开头(feature/.new)
    • 分支名的任何地方都不能包含连个连续的点
    • 分支名不能包含空格或空白符
    • 分支名不能包含波浪线~、插入符^、冒号:、问号?、星号*、左括号[,以及ASCII码控制字符

    二、创建分支

    [root@localhost public_html]# git branch pu-1138
    
    为了在软件2.3发布版本上修复一个BUG,可以指定rel-2.3的分支为开始提交
    [root@localhost public_html]# git branch pu-1138 rel-2.3
    
    [root@localhost public_html]# git branch
    * master
      pu-1138
    
    [root@localhost public_html]# git show-branch
    * [master] mv bar to foo
     ! [pu-1138] mv bar to foo
    --
    *+ [master] mv bar to foo
    [root@localhost public_html]# git show-branch pu-1138
    [pu-1138] mv bar to foo
    

    例子:

    [root@localhost public_html]# git branch testing
    [root@localhost public_html]# git branch
    * master
      testing
    [root@localhost public_html]# ls
    foo.html  index.html
    [root@localhost public_html]# echo 'testing' > test.txt
    [root@localhost public_html]# ls
    foo.html  index.html  test.txt
    [root@localhost public_html]# git add .
    [root@localhost public_html]# git commit -m "add test.txt"
    [master b0b257c] add test.txt
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 test.txt
    [root@localhost public_html]# ls
    foo.html  index.html  test.txt
    [root@localhost public_html]# git checkout testing
    Switched to branch 'testing'
    [root@localhost public_html]# ls
    foo.html  index.html
    [root@localhost public_html]# git checkout master
    Switched to branch 'master'
    [root@localhost public_html]# ls
    foo.html  index.html  test.txt
    
    [root@localhost public_html]# git checkout -b newtest
    Switched to a new branch 'newtest'
    [root@localhost public_html]# ls
    foo.html  index.html  test.txt
    [root@localhost public_html]# git rm test.txt
    rm 'test.txt'
    [root@localhost public_html]# ls
    foo.html  index.html
    [root@localhost public_html]# git commit -am "removed test.txt"
    [newtest 480b789] removed test.txt
     1 files changed, 0 insertions(+), 1 deletions(-)
     delete mode 100644 test.txt
    [root@localhost public_html]# git checkout master
    Switched to branch 'master'
    [root@localhost public_html]# ls
    foo.html  index.html  test.txt
    

    三、检出分支

    [root@localhost public_html]# git branch
    * master
      pu-1138
    [root@localhost public_html]# git checkout pu-1138
    Switched to branch 'pu-1138'
    [root@localhost public_html]# ls
    foo.html  index.html
    [root@localhost public_html]# git branch
      master
    * pu-1138
    

    四、删除分支

    [root@localhost public_html]# git branch -d pu-1138
    Deleted branch pu-1138 (was aa431d9).
    [root@localhost public_html]# git branch
    * master
    

    五、合并分支

    (1)合并一个分支

    [root@localhost public_html]# git branch
    * master
      newtest
      testing
    [root@localhost public_html]# git checkout testing
    Switched to branch 'testing'
    [root@localhost public_html]# ls
    foo.html  index.html
    [root@localhost public_html]# git merge newtest
    Updating aa431d9..b488b19
    Fast-forward
     yes.html |    1 +
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 yes.html
    [root@localhost public_html]# ls
    foo.html  index.html  yes.html
    

    (2)合并两个分支

    [root@localhost ~]# mkdir fenzhi_total
    [root@localhost ~]# cd fenzhi_total/
    [root@localhost fenzhi_total]# ls
    [root@localhost fenzhi_total]# git init
    Initialized empty Git repository in /root/fenzhi_total/.git/
    [root@localhost fenzhi_total]# cat > file
    Line 1 stuff
    Line 2 stuff
    Line 3 stuff
    [root@localhost fenzhi_total]# ls
    file
    [root@localhost fenzhi_total]# git add file
    [root@localhost fenzhi_total]# git commit -m "Initial 3 line file"
    [master (root-commit) 2f793c2] Initial 3 line file
     1 files changed, 3 insertions(+), 0 deletions(-)
     create mode 100644 file
    [root@localhost fenzhi_total]# cat > other_file
    Here is stuff on another file!
    [root@localhost fenzhi_total]# git add other_file 
    [root@localhost fenzhi_total]# git commit -m "Another file"
    [master 9f175ec] Another file
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 other_file
    [root@localhost fenzhi_total]# git checkout -b alternate master^
    Switched to a new branch 'alternate'
    [root@localhost fenzhi_total]# git show-branch
    * [alternate] Initial 3 line file
     ! [master] Another file
    --
     + [master] Another file
    *+ [alternate] Initial 3 line file
    [root@localhost fenzhi_total]# cat >> file
    Line 4 alternate stuff
    [root@localhost fenzhi_total]# git commit -am "Add alternate's line 4"
    [alternate c004281] Add alternate's line 4
     1 files changed, 1 insertions(+), 0 deletions(-)
    [root@localhost fenzhi_total]# git checkout master
    Switched to branch 'master'
    [root@localhost fenzhi_total]# git status
    # On branch master
    nothing to commit (working directory clean)
    [root@localhost fenzhi_total]# ls
    file  other_file
    [root@localhost fenzhi_total]# git merge alternate
    Merge made by recursive.
     file |    1 +
     1 files changed, 1 insertions(+), 0 deletions(-)
    [root@localhost fenzhi_total]# git log --graph --pretty=oneline --abbrev-commit
    *   bdb04ee Merge branch 'alternate'
    |  
    | * c004281 Add alternate's line 4
    * | 9f175ec Another file
    |/  
    * 2f793c2 Initial 3 line file
    [root@localhost fenzhi_total]# cat file 
    Line 1 stuff
    Line 2 stuff
    Line 3 stuff
    Line 4 alternate stuff
    

    (3)有冲突的分支

    [root@localhost fenzhi_total]# git branch
      alternate
    * master
    [root@localhost fenzhi_total]# 
    [root@localhost fenzhi_total]# 
    [root@localhost fenzhi_total]# git checkout master
    Already on 'master'
    [root@localhost fenzhi_total]# cat >> file
    Line 5 stuff
    Line 6 stuff
    [root@localhost fenzhi_total]# git commit -am "Add line 5 and 6"
    [master 6e1cf57] Add line 5 and 6
     1 files changed, 2 insertions(+), 0 deletions(-)
    [root@localhost fenzhi_total]# git checkout alternate
    Switched to branch 'alternate'
    [root@localhost fenzhi_total]# git show-branch
    * [alternate] Add alternate's line 4
     ! [master] Add line 5 and 6
    --
     + [master] Add line 5 and 6
    *+ [alternate] Add alternate's line 4
    [root@localhost fenzhi_total]# cat >> file
    Line 5 alternate stuff
    Line 6 alternate stuff
    [root@localhost fenzhi_total]# cat file
    Line 1 stuff
    Line 2 stuff
    Line 3 stuff
    Line 4 alternate stuff
    Line 5 alternate stuff
    Line 6 alternate stuff
    [root@localhost fenzhi_total]# git diff
    diff --git a/file b/file
    index a29c52b..802acf8 100644
    --- a/file
    +++ b/file
    @@ -2,3 +2,5 @@ Line 1 stuff
     Line 2 stuff
     Line 3 stuff
     Line 4 alternate stuff
    +Line 5 alternate stuff
    +Line 6 alternate stuff
    [root@localhost fenzhi_total]# git commit -am "Add alternate line 5 and 6"
    [alternate 4596a0d] Add alternate line 5 and 6
     1 files changed, 2 insertions(+), 0 deletions(-)
    [root@localhost fenzhi_total]# git show-branch
    * [alternate] Add alternate line 5 and 6
     ! [master] Add line 5 and 6
    --
    *  [alternate] Add alternate line 5 and 6
     + [master] Add line 5 and 6
    *+ [alternate^] Add alternate's line 4
    [root@localhost fenzhi_total]# git checkout master
    Switched to branch 'master'
    [root@localhost fenzhi_total]# git merge alternate
    Auto-merging file
    CONFLICT (content): Merge conflict in file
    Automatic merge failed; fix conflicts and then commit the result.
    
    此时出现合并冲突
    [root@localhost fenzhi_total]# git diff
    diff --cc file
    index 4d77dd1,802acf8..0000000
    --- a/file
    +++ b/file
    @@@ -2,5 -2,5 +2,10 @@@ Line 1 stuf
      Line 2 stuff
      Line 3 stuff
      Line 4 alternate stuff
    ++<<<<<<< HEAD
     +Line 5 stuff
     +Line 6 stuff
    ++=======
    + Line 5 alternate stuff
    + Line 6 alternate stuff
    ++>>>>>>> alternate
    [root@localhost fenzhi_total]# cat file
    Line 1 stuff
    Line 2 stuff
    Line 3 stuff
    Line 4 alternate stuff
    <<<<<<< HEAD
    Line 5 stuff
    Line 6 stuff
    =======
    Line 5 alternate stuff
    Line 6 alternate stuff
    >>>>>>> alternate
    
    此时可以选择只取一边的版本或两边混合(需要手动修改)
    [root@localhost fenzhi_total]# vim file
    [root@localhost fenzhi_total]# cat file 
    Line 1 stuff
    Line 2 stuff
    Line 3 stuff
    Line 4 alternate stuff
    Line 5 alternate stuff
    Line 6 stuff
    [root@localhost fenzhi_total]# git add file
    [root@localhost fenzhi_total]# git commit
    [master 5a8e0fa] Merge branch 'alternate'
    [root@localhost fenzhi_total]# git show-branch
    ! [alternate] Add alternate line 5 and 6
     * [master] Merge branch 'alternate'
    --
     - [master] Merge branch 'alternate'
    +* [alternate] Add alternate line 5 and 6
    [root@localhost fenzhi_total]# git log
    commit 5a8e0fa2318cc9d9aa4171d8aaff0105c4a06331
    Merge: 6e1cf57 4596a0d
    Author: tong <tongxiaoda@anzhi.com>
    Date:   Tue Feb 27 16:24:48 2018 +0800
    
        Merge branch 'alternate'
        
        Conflicts:
            file
        
        change file
    
    commit 4596a0d219ceb1ac33214a8b2f891d7788ea80e5
    Author: tong <tongxiaoda@anzhi.com>
    Date:   Tue Feb 27 16:18:11 2018 +0800
    
        Add alternate line 5 and 6
    
    commit 6e1cf5717cd1012f527262d3108c8fad22dc4dde
    Author: tong <tongxiaoda@anzhi.com>
    Date:   Tue Feb 27 16:16:26 2018 +0800
    
        Add line 5 and 6
    
    commit bdb04eec38411ea7d490054f4d236af783debb3c
    Merge: 9f175ec c004281
    Author: tong <tongxiaoda@anzhi.com>
    Date:   Tue Feb 27 16:13:20 2018 +0800
    
        Merge branch 'alternate'
    
    commit c0042812ba692e1a16c0a5e0d9c9dc5e9b1f7a7e
    Author: tong <tongxiaoda@anzhi.com>
    Date:   Tue Feb 27 16:12:39 2018 +0800
    
        Add alternate's line 4
    
    commit 9f175ec6e0e9b85de029969bb1da897a84abc4f5
    Author: tong <tongxiaoda@anzhi.com>
    Date:   Tue Feb 27 16:11:03 2018 +0800
    
        Another file
    
    commit 2f793c27b2bc1ab5b046eec2790e88e751727566
    Author: tong <tongxiaoda@anzhi.com>
    Date:   Tue Feb 27 16:10:12 2018 +0800
    
        Initial 3 line file
    

    (4)处理合并冲突

    [root@localhost fz_t]# git init
    Initialized empty Git repository in /root/fz_t/.git/
    [root@localhost fz_t]# echo hello > hello
    [root@localhost fz_t]# git add hello
    [root@localhost fz_t]# git commit -m "Initial hello file"
    [master (root-commit) 296dfa0] Initial hello file
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 hello
    [root@localhost fz_t]# git checkout -b alt
    Switched to a new branch 'alt'
    [root@localhost fz_t]# echo world >> hello
    [root@localhost fz_t]# echo 'Yay!' >> hello
    [root@localhost fz_t]# git commit -am "One world"
    [alt ea3c204] One world
     1 files changed, 2 insertions(+), 0 deletions(-)
    [root@localhost fz_t]# git checkout master
    Switched to branch 'master'
    [root@localhost fz_t]# echo worlds >> hello
    [root@localhost fz_t]# echo 'Yay!' >> hello
    [root@localhost fz_t]# git commit -am "All worlds"
    [master 8f316ee] All worlds
     1 files changed, 2 insertions(+), 0 deletions(-)
    [root@localhost fz_t]# git merge alt
    Auto-merging hello
    CONFLICT (content): Merge conflict in hello
    Automatic merge failed; fix conflicts and then commit the result.
    
    定位冲突文件
    [root@localhost fz_t]# git status
    # On branch master
    # Unmerged paths:
    #   (use "git add/rm <file>..." as appropriate to mark resolution)
    #
    #	both modified:      hello
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    [root@localhost fz_t]# git ls-files -u
    100644 ce013625030ba8dba906f756967f9e9ca394464a 1	hello
    100644 e63164d9518b1e6caf28f455ac86c8246f78ab70 2	hello
    100644 562080a4c6518e1bf67a9f58a32a67bff72d4f00 3	hello
    
    检查冲突
    [root@localhost fz_t]# git diff HEAD
    diff --git a/hello b/hello
    index e63164d..1f2f61c 100644
    --- a/hello
    +++ b/hello
    @@ -1,3 +1,7 @@
     hello
    +<<<<<<< HEAD
     worlds
    +=======
    +world
    +>>>>>>> alt
     Yay!
    [root@localhost fz_t]# git diff MERGE_HEAD
    diff --git a/hello b/hello
    index 562080a..1f2f61c 100644
    --- a/hello
    +++ b/hello
    @@ -1,3 +1,7 @@
     hello
    +<<<<<<< HEAD
    +worlds
    +=======
     world
    +>>>>>>> alt
     Yay!
    
    或使用以下命令检查
    [root@localhost fz_t]# git log --merge --left-right -p hello
    commit <8f316ee211109affd61eb89c001ac139f7274406
    Author: tong <tongxiaoda@anzhi.com>
    Date:   Tue Feb 27 16:28:35 2018 +0800
    
        All worlds
    
    diff --git a/hello b/hello
    index ce01362..e63164d 100644
    --- a/hello
    +++ b/hello
    @@ -1 +1,3 @@
     hello
    +worlds
    +Yay!
    
    commit >ea3c2044aae6b375d3cba2fa0ac9ff1d78dd6779
    Author: tong <tongxiaoda@anzhi.com>
    Date:   Tue Feb 27 16:27:53 2018 +0800
    
        One world
    
    diff --git a/hello b/hello
    index ce01362..562080a 100644
    --- a/hello
    +++ b/hello
    @@ -1 +1,3 @@
     hello
    +world
    +Yay!
    
    不使用任何版本,继续修改file
    [root@localhost fz_t]# cat hello 
    hello
    worldly ones
    Yay!
    [root@localhost fz_t]# git diff
    diff --cc hello
    index e63164d,562080a..0000000
    --- a/hello
    +++ b/hello
    @@@ -1,3 -1,3 +1,3 @@@
      hello
    - worlds
     -world
    ++worldly ones
      Yay!
    
    结束解决冲突
    [root@localhost fz_t]# git add hello
    [root@localhost fz_t]# git ls-files -s
    100644 01e406a245782525e6b02cadf6df25e212563967 0	hello
    [root@localhost fz_t]# cat .git/MERGE_MSG 
    Merge branch 'alt'
    
    Conflicts:
    	hello
    [root@localhost fz_t]# git commit
    [master af5cf67] Merge branch 'alt'
    [root@localhost fz_t]# git show
    commit af5cf675e311952e5377e5942dd1d7689427eec8
    Merge: 8f316ee ea3c204
    Author: tong <tongxiaoda@anzhi.com>
    Date:   Tue Feb 27 16:38:29 2018 +0800
    
        Merge branch 'alt'
        
        Conflicts:
            hello
    
    diff --cc hello
    index e63164d,562080a..01e406a
    --- a/hello
    +++ b/hello
    @@@ -1,3 -1,3 +1,3 @@@
      hello
    - worlds
     -world
    ++worldly ones
      Yay!
    

    (5)中止或重新启动合并

    git reset --hard HEAD
    把工作目录和索引都还原到git merge命令之前
    
    git reset --hard ORIG_HEAD
    中止或在它已经结束后放弃
    
  • 相关阅读:
    查看.Net Framework版本的方法
    JS手机号码自动换位
    VS2008正版序列号
    ASP.NET对XML的操作
    JS宽高度
    下载某个网站的内容
    C#中如何将控件中表格数据导出到exeal文档中
    像素 厘米 英寸 换算
    编程经验点滴避免使用汉语拼音做变量名
    编程经验点滴避免在数据库访问函数中使用 try catch
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/8479351.html
Copyright © 2020-2023  润新知