Git分支管理(详,小白专用)

版权声明:转载请注明出处 https://blog.csdn.net/fan521dan/article/details/89918413

Git分支管理(详,小白专用)

  • 几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
  • 有人把 Git 的分支模型称为"必杀技特性",而正是因为它,将 Git 从版本控制系统家族里区分出来。

分支命令

  • 创建分支 git branch (branchname)
    • 当你执行git init的时候,缺省情况下 Git 就会为你创建"master"分支
  • 切换分支 git checkout (branchname)
    • 当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录
  • 合并分支 git merge (branchname)
    • 你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支
  • 查看分支 git branch
  • 删除分支命令: git branch -d (branchname)

分支示例

下方的示例将会使用以上4种分支命令和上一章的部分命令,作为命令的详细解释

  1. 准备环境
    1. git init demoBranch 创建一个仓库,命名为 demoBranch

    2. cd demoBranch 进入该仓库的目录

    3. touch READMEvim README

      • 创建README文件,并写入demo.com
    4. touch hello.phpvim hello.php

      • 创建hello.php文件,并写入
        <?php
        echo 'demo例子:www.demo.com';
        echo 'demo例子:www.demo.com';
        ?>
        
    5. git add .将文件写入仓库

    6. git commit -m '第一次提交'提交

  2. 查看当前分支
    • git branch
    • 会显示出 * master ,意思是有一个叫做"master"的分支,并且该分支是当前分支。
  3. 创建一个名为 testing 的分支
    git branch testing 
    git branch
    * master
      testing
    
    现在我们可以看到,有了一个新分支 testing
    $ ls
    hello.php README
    $ git checkout testing
    $ ls
    hello.php README
    $ git checkout master
    
    我们看到现在2个分支都有这2个文件,继续切回到master分支
  4. 修改 master 分支的文件
    1. echo 'demo.com' > test.txt 将‘demo.com’写入到test.txt文件中
    2. git add . 写入到仓库
    3. git commit -m 'add test.txt' 提交
  5. 列出分支
    $ ls
    hello.php README test.txt
    $ git checkout testing
    $ ls
    hello.php README
    $ git checkout master
    $ ls 
    hello.php README test.txt
    
    测试发现切换到testing分支时,并没有test.txt文件,切换为master时,test.txt文件又出现了
  6. 再次创建一个新的分支
    使用git checkout -b newtest命令来创建新分支并立即切换到该分支下
    $ ls
    hello.php  README  test.txt
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (newtest)
    $ git rm README
    rm 'README'
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (newtest)
    $ ls
    hello.php  test.txt
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (newtest)
    $ git commit -am 'remove README'
    [newtest 41cf349] remove READMEE
     1 file changed, 1 deletion(-)
     delete mode 100644 README
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (newtest)
    $ git checkout master
    Switched to branch 'master'
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ ls
    hello.php  README  test.txt
    
    如你所见,我们创建了一个分支,在该分支的上下文中移除了一些文件,然后切换回我们的主分支,那些文件又回来了。
    使用分支将工作切分开来,从而让我们能够在不同上下文中做事,并来回切换。
  7. 删除分支
    • $ git branch -d testing
      删除testing 分支
  8. 合并分支
    整理好分支的内容,要将它合并到主分支里去
    $ git branch
    * master
      newtest
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ ls
    hello.php  README  test.txt
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ git merge newtest
    Updating 6b48939..41cf349
    Fast-forward
     README | 1 -
     1 file changed, 1 deletion(-)
     delete mode 100644 README
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ ls
    hello.php  test.txt
    
    以上实例中我们将 newtest 分支合并到主分支去,README 文件被删除

合并冲突

  • 合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改
  • 首先创建一个名为“change_site” 的分支,切换过去,将test.txt文件的内容修改为“www.demo.com
  • 将修改的内容提交到 “change_site” 分支中。 然后切换回 “master” 分支我们可以看内容恢复到我们修改前的,我们再次修改test.txt文件
  • 代码如下所示
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ cat test.txt
    demo.com;
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ git checkout -b change_site
    Switched to a new branch 'change_site'
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (change_site)
    $ vim test.txt
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (change_site)
    $ head -1 test.txt
    www.demo.com;
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (change_site)
    $ git commit -am 'change the site'
    [change_site 17dd99e] change the site
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (change_site)
    $ git checkout master
    Switched to branch 'master'
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ head -1 test.txt
    demo.com;
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ vim test.txt
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ git diff
    diff --git a/test.txt b/test.txt
    index c31eb3f..60faec6 100644
    --- a/test.txt
    +++ b/test.txt
    @@ -1 +1,2 @@
    -demo.com;
    +runoob.com;
    +新增一行
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ git commit -am '新增加一行'
    [master 6befd7e] 新增加一行
     1 file changed, 2 insertions(+), 1 deletion(-)
    
    现在我们开始合并分支
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master)
    $ git merge change_site
    Auto-merging test.txt
    CONFLICT (content): Merge conflict in test.txt
    Automatic merge failed; fix conflicts and then commit the result.
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING)
    $ cat test.txt
    <<<<<<< HEAD
    runoob.com;
    新增一行
    =======
    www.demo.com;
    >>>>>>> change_site
    
    发现合并的时候 test.txt 文件发生了冲突,接下来我们需要手动去修改它。
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING)
    $ vim test.txt
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING)
    $ cat test.txt
    www.runoob.com;
    新增一行
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING)
    $ git diff
    diff --cc test.txt
    index 60faec6,b1fa8ff..0000000
    --- a/test.txt
    +++ b/test.txt
    @@@ -1,2 -1,1 +1,2 @@@
    - runoob.com;
     -www.demo.com;
    ++www.runoob.com;
     +新增一行
    
    • 在 Git 中,我们可以用 git add 要告诉 Git 文件冲突已经解决
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING)
    $ git status -s
    UU test.txt
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING)
    $ git add test.txt
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING)
    $ git status -s
    M  test.txt
    
    Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING)
    $ git commit -m '解决合并冲突'
    [master c17592e] 解决合并冲突
    
    
    现在我们成功解决了合并中的冲突,并提交了结果。

猜你喜欢

转载自blog.csdn.net/fan521dan/article/details/89918413
今日推荐