• Git学习笔记(四)


    本系列学习笔记参考廖雪峰老师的Git教程,地址:https://www.liaoxuefeng.com/wiki/896043488029600

     

    Git学习笔记(一) https://www.cnblogs.com/littlemonsterksn/p/13562632.html

    Git学习笔记(二) https://www.cnblogs.com/littlemonsterksn/p/13583004.html

    Git学习笔记(三) https://www.cnblogs.com/littlemonsterksn/p/13583197.html

    Git学习笔记(四) https://www.cnblogs.com/littlemonsterksn/p/13593841.html

    Git学习笔记(五) https://www.cnblogs.com/littlemonsterksn/p/13598243.html

    十三、解决冲突

    1. 新建分支,在readme.txt添加内容并进行提交

    新增并切换到feature1分支,新增一行信息
    添加的内容:
    Creating a new branch is quick AND simple.

    $ git switch -c feature1
    $ git add readme.txt
    $ git commit -m "AND simple"

     

    2. 切换到master分支,在readme.txt文件添加一行信息并提交

    添加的内容:

    Creating a new branch is quick & simple.

    $ git switch master
    $ git add readme.txt
    $ git commit -m "& simple"

     

    3. 在master合并feature1分支

    $ git merge feature1

    提示readme.txt文件冲突,必须手动解决冲突后再提交

    用git status也可以查看冲突的文件

    查看readme.txt可以看到提示冲突的地方,标记了不同分支的内容

    4. 手动修改后再提交

    手动修改冲突后,提交成功了

    $ git add readme.txt
    $ git commit -m "conflict fixed"

    注意下图中的conflict单词拼写错了…

     现在,master分支和feature1分支合并变化如下图所示:

    5. 查看分支合并的情况

    用带参数的git log也可以看到分支的合并情况

    用git log --graph命令可以看到分支合并图

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

    6. 合并完成后,删除feature1分支

    $ git branch -d reature1

    十四、分支管理,不用快速合并

    通常合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

    如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

    1. 新建一个dev分支,并在readme.txt文件最后加一排内容

    $ git switch -c dev

    2. 提交一个新的commit

    $ git add readme.txt
    $ git commit -m "add merge"

    3. 切换到master分支

    $ git switch master
    $ git branch

    4. 合并dev分支

    $ git merge --no-ff -m "merge with no-ff" dev

    注意--no-ff参数,表示禁用Fast forward

    因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去

    5. 查看分支历史

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

    6. 不用fast forward的模式,merge后是这样的形式

    小结:

    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并

    十五、BUG分支

    有了bug就需要修复,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

    当接到一个修复一个代号101的bug的任务时,很自然地,想创建一个分支issue-101来修复它,但是,当前正在dev上进行的工作还没有提:

    1. 创建并切换到dev分支

    2. 修改readme.txt文件

    在文件最后增加一行内容

    3. 查看状态

    4. 工作区暂存

    在dev的工作还需要1天,但是有个紧急的bug必须在两个小时内修复

    这时可以用Git的stash功能,把工作区暂时储藏起来,等以后恢复现场后,就可以继续工作了

    $ git stash
    $ git status

    储藏后,再查看工作区,就是干净的了

    5. 新建并切换到修改bug的分支

    首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支

    $ git switch master
    $ git switch -c issue-101

    6. 在readme.txt文件最后添加一行

    然后提交readme.txt

    7. 切换到master分支,合并bug分支

    $ git switch master
    $ git merge --no-ff -m "merged bug fix again" issue-101

    8. 切回dev分支

    查看状态,用git stash list查看暂存的工作区列表

    $ git stash list

    9. 恢复工作区

    一是用git stash apply恢复,但是恢复后,stash内容并不删除,需要用git stash drop来删除

    另一种方式是用git stash pop,恢复的同时把stash内容也删了

    再用git stash list查看,就看不到任何stash内容了

    恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令

    $ git stash apply stash@{0}

    10. 在dev分支上修复同样的bug

    因为dev分支是早期从master分支分出来的,所以,在master分支上修复了bug后,这个bug其实在当前dev分支上也存在。

    同样的bug,要在dev上修复,只需要把5db1a03 fix bug again这个提交所做的修改“复制”到dev分支。注意:只是复制5db1a03 fix bug again这个提交所做的修改,并不是把整个master分支merge过来。

    为了方便操作,Git专门提供了一个cherry-pick命令,能复制一个特定的提交到当前分支:

    $ git cherry-pick 5db1a03

    注意:刚才在dev工作区修改的内容需要先commit一下。直接切到dev然后cherry-pick会报错

    先查看一下状态,查看readme.txt文件内容:

    然后提交当前dev分支内容

     

     再git cherry-pick 5db1a03

    完成后,再次查看readme.txt文件,修复bug的内容已经复制过来了

    小结

    修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除

    当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场

    在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动

  • 相关阅读:
    vue学习6
    vue学习5
    vue学习3
    vue学习2
    vue学习1
    idea快速查找和替换快捷键
    mysql三元表达式
    1 Java Lambda表达式forEach无法跳出循环的解决思路
    6 Mybatis Plus and 和 or,分页Page使用
    4 Mybatis Plus使用redis作为二级缓存
  • 原文地址:https://www.cnblogs.com/littlemonsterksn/p/13593841.html
Copyright © 2020-2023  润新知