zoukankan      html  css  js  c++  java
  • git学习(5)分支管理(续)

    git学习(5)分支管理(续)

    1.解决冲突

    冲突的产生
    如我们在新建分支和原来master分支上对同一文件做了修改并提交,在合并分支的时候就会遇到冲突
    比如我新建了分支myBranch,在这个分支上修改readme.txt,然后commit,然后在master的分支上也修改readme.txt,然后也commit,这个时候进行merge,这个时候git会提醒存在冲突,需要我们在把冲突解决后再提交。

    步骤如下:

    新分支和主分支各自修改readme.txt--->主分支合并新分支产生冲突---->解决冲突--->主分支提交--->删除新分支

    从合并分支开始

    $ git merge myBranch
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.
    $ cat readme.txt
    ...
    new branch record
    <<<<<<< HEAD
    createing a new branch is quick & simple.
    =======
    createing a newbrach is quick and simple.
    >>>>>>> myBranch
    

    git使用<<<<<<< ,=======,>>>>>>>来标记不同分支的内容,把冲突的内容修改为最终需要的代码,然后add,commit,最后删除分支

    可以通过git log --graph查看分支合并的情况

    $ git log --graph --pretty=oneline --abbrev-commit
    *   2a4d4ea confict fixed
    |  
    | * 41048a1 add simple word 
    * | 9f00674 & simple
    |/  
    * 86c291c new branch
    ..
    

    2.Bug分支

    当在分支newBranch工作的时候收到修改bug 108的通知,这个时候需要新建一个分支issue-108,当前newBranch分支又无法立即完成,如果新建一个分支的话,原来newBranch因为没有提交会丢失,提交吧newBranch又没有完成,总不能写一个“待完成”的提交原因吧。这个时候,stash来拯救我们了:

    $ ls
    currentwork.txt	newDev.txt	readme.txt
    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
    	currentwork.txt
    
    nothing added to commit but untracked files present (use "git add" to track)
    

    上面可以看到我们正在currentwork.txt玩命工作,这个时候接到修复readme.txt的bug,用stash(隐藏物的意思)功能把当前的工作区隐藏起来就能新建一个分支了。
    首先确定currentwork.txt已经被add,没有add的话,文件是还没有添加到git的管理中的,添加后就能使用stash命令了

    $ git stash
    Saved working directory and index state WIP on currentBranch: 832fb4f fix readme bug
    HEAD is now at 832fb4f fix an importent bug
    $ git status
    On branch master
    On branch currentBranch
    nothing to commit, working directory clean
    

    好了现在可以知道工作区已经被隐藏起来,切换到master可以放心的建立新分支了
    建立新分支,修复readme bug,然后合并分支,跟之前分支管理内容是一样的:

    $git checkout master
    Switched to branch 'master'
    $ git checkout -b issue-108
    Switched to a new branch 'issue-108'
    /*修复bug*/
    $ git status
    On branch issue-108
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
    	modified:   readme.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    $ git add readme.txt
    $ git commit -m "fix readme bug"
    [issue-108 832fb4f] fix readme bug
     1 file changed, 1 insertion(+)
    $ git checkout master
    Switched to branch 'master'
    $ git merge issue-108
    Updating 2a4d4ea..832fb4f
    Fast-forward
     readme.txt | 1 +
     1 file changed, 1 insertion(+)
    

    好了bug修复了,现在可以切回我们的开始工作的工作区了,用stash list命令查看一下当前的隐藏工作区,找到以后使用stash pop找回工作区并删除原来隐藏工作,或者使用stash apply找回原来工作区,但是需要用stash drop删除隐藏的工作区,

    $ git checkout currentBranch
    Switched to branch 'currentBranch'
    $ ls
    newDev.txt	readme.txt
    $ git stash pop
    $ ls
    currentwork.txt	newDev.txt	readme.txt
    

    ok,工作区又回来了,可以继续工作了
    但是看看readme.txt内容还是原来的也就是这个bug因为没有合并主分支,并没有得到修复,怎么办呢,我的建议是如果bug不影响当前开发的话就先继续开发,以后合并分支后,重新建立该分支。注意的是即使合并分支后currentBranch的分支bug也还是存在的。但是主master不会因为合并丢失bug修复。

    3.feature 分支

    软件开发中总是有新功能需要添加进来,添加一些实验性质的代码我们最好不好把主分支给搞乱了,所以需要新建一个分支。但是如果在实验阶段证明新功能并不适合实际需要,需要删除。。like this:

    $ git checkout -b feature-talk
    Switched to a new branch 'feature-talk'
    
    /*修改currentwork.txt*/
    
    $ git add currentwork.txt
    $ git commit -m "talk"
    [feature-talk c680bff] talk
     1 file changed, 1 insertion(+)
    

    ok,虽然完成了很多功能,但是需要删除了

    $ git branch -d feature-talk
    error: The branch 'feature-talk' is not fully merged.
    If you are sure you want to delete it, run 'git branch -D feature-talk'.
    

    git会很友好的告诉我们这个分支还没有合并不能删除啊,如果强制删除使用 -D

    好吧,我们确实是不需要了,删除这个分支

    $ git branch -D feature-talk
    Deleted branch feature-talk (was c680bff).
    
  • 相关阅读:
    虚拟化与KVM部署
    Jenkins部署及使用
    Tomcat及LAMT架构搭建
    版本控制与Gitlab配置
    Cobbler介绍及搭载
    MYSQL集群配置
    HAProxy——配置与实例
    LVS——配置实例
    Linux——集群
    关于IntellIJ IDEA 2016.2.4新建项目的Java Enterprise没有显示问题
  • 原文地址:https://www.cnblogs.com/keithmoring/p/4232252.html
Copyright © 2011-2022 走看看