zoukankan      html  css  js  c++  java
  • git学习4:分支管理

    每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,这个分支叫主分支,即master分支,HEAD指向mastermaster指向提交,所以,HEAD指向的就是当前分支。每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。

    当我们创建新的分支dev时,git新建了一个指针叫dev,指向master相同的提交,同时把HEAD指向dev,就表示当前分支在dev上,不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变,假如我们在dev上的工作完成了,就可以把dev合并到master上。最简单的合并方法,就是直接把master指向dev的当前提交,就完成了合并。合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支

    首先,创建dev分支并切换到该分支,

    git checkout -b dev

    解释:-b表示创建并切换,

    相当于两条命令:

    git branch dev

    git checkout dev

    可以用命令git branch查看当前分支,会列出所有分支,在当前分支前标一个*号。

    此时对readme.txt做修改,然后提交

    git add readme.txt

    git commit -m 'branch test'

    现在切换回到master分支

    git checkout master

    查看readme文件,发现刚才添加的内容不见了,这是因为那个提交是在dev分支上,而不再当前的master分支上。

    这时把dev分支的修改合并到master上

    git merge dev

    用于合并指定分支到当前分支上,

    合并后,再查看readme文件,添加的内容出现了。

    这时就可以删除dev分支了,

    git branch -d dev

    删除后,查看branch

    git branch

    只剩下master分支了。

    冲突解决:

    1,创建并切换dev分支

    git checkout -v dev

    修改readme文件,然后添加到暂存区,再提交新的commit。

    2,切换回master,

    git checkout master

    修改readme文件,然后添加到暂存区,再提交新的commit。

    master分支和dev分支各自都分别有新的提交,这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,

     git merge dev

    果然出现冲突信息,显示合并失败。

    git status也可以告诉我们冲突的文件,

    我们可以直接查看readme.txt的内容:

    Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改readme.txt后保存

    然后添加到暂存区,再提交新的commit,,

    合并后,用git log查看分支历史,

    git log --graph --pretty=online --abbrev-commit

    最后,删除dev分支:

    git branch -d dev

    一般分支进行合并时,git会采用Fast Forward模式,但这种模式有弊端,就是删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

    创建并切换dev分支

    git checkout -v dev

    修改readme文件,然后添加到暂存区,再提交新的commit。

    现在,我们切换回master

    git checkout master

    准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward

    git merge --no-ff -m 'merge with no-ff' dev

    合并后,我们用git log看看分支历史:

    git log --graph --pretty=oneline --abbrev-commit

    分支管理原则:master分支应该是非常稳定的,即仅仅用来发布新版本。平时在dev分支上进行试验,时不时分之合并即可。

    假设当前在dev分支上进行工作,但是需要马上修复bug,如何处理呢?

    由于dev的工作还未完成,所以不能提交,

    1,使用git  stash命令,把当前的工作现场储存起来,等恢复现场之后继续工作。

    git  stash

    2,假设bug在master分支上,从master创建临时分支

    git checkout master

    git checkout -b  issue-101

    3,修改bug,然后添加到暂存区,并提交

    git add readme.txt

    git commit -m 'fix bug 101'

    4,切换到master分支,合并,删除issue-101分支。

    git checkout master

    git merge --no-ff -m 'merge bug fix101' issue-101

    git branch -d issue-101

    5,回到dev分支

    git checkout dev

    6,查看工作现场

    git stash list

    7,恢复工作线程

    git stash pop

    恢复的同时也把stash内容删除了

    软件开发中,每添加一个功能,最好新建一个feature分支,完成后合并,最后删除该feature分支。

    假如,开发代号为scan的新功能:

    1,增加并切换到新分支上,

    git checkout -b feature-sacan

    2,开发完毕,增加到暂存区,并提交

    git add scan.py

    git commit -m 'develop new function'

    3,切换到dev分支,

    git checkout dev

    4,合并和bug分支的合并类似,合并后删除。

    或者因某些原因,这个分支要删除

    git branch -d feature-scan

    但是,git提示,这个分支没有合并,要强行删除,需要使用命令、

    git branch -D featuren-scan

  • 相关阅读:
    CSS布局 ——从display,position, float属性谈起
    svchost.exe启动服务原理(如何查看系统服务究竟启动了哪个文件)
    简单模拟多线程Socket通信(java)
    把爱融入程序——程序,源自生活,高于生活
    SQL LIKE语句多条件贪婪匹配算法
    SQL多条件模糊查询解决方案(类似百度搜索)
    SQL LIKE语句多条件贪婪加权匹配算法(改进版)
    Foxmail添加微软最新outlook.com邮箱解决方案
    SQL LIKE语句多条件贪婪加权匹配(新增必要词指定)
    搜索的艺术——搜索引擎使用心得
  • 原文地址:https://www.cnblogs.com/Nick-M/p/4605528.html
Copyright © 2011-2022 走看看