zoukankan      html  css  js  c++  java
  • 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
    中止或在它已经结束后放弃
    
  • 相关阅读:
    Openstack API 开发 快速入门
    virtualBox虚拟机到vmware虚拟机转换
    使用Blogilo 发布博客到cnblogs
    Openstack Troubleshooting
    hdoj 1051 Wooden Sticks(上升子序列个数问题)
    sdut 2430 pillars (dp)
    hdoj 1058 Humble Numbers(dp)
    uva 10815 Andy's First Dictionary(快排、字符串)
    sdut 2317 Homogeneous squares
    hdoj 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列+二分)
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/8479351.html
Copyright © 2011-2022 走看看