zoukankan      html  css  js  c++  java
  • Git操作分支

    Git操作分支

    事前预备

    首先建立一个新目录,并在里面建立一个空数据库。这里我们创建一个名为tutorial的目录。

    D:>mkdir tutorial
    
    D:>cd tutorial
    
    D:	utorial>git init
    Initialized empty Git repository in D:/tutorial/.git/
    

    在tutorial目录创建一个名为myfile.txt的档案,然后提交。

    D:	utorial>git add myfile.txt
    
    D:	utorial>git commit -m "first commit"
    [master (root-commit) 62fac81] first commit
     1 file changed, 1 insertion(+)
     create mode 100644 myfile.txt
    

    建立分支

    创建名为issue1的分支。(通过branch命令来创建分支)

    D:	utorial>git branch issue1
    

    不指定参数直接执行branch命令的话,可以显示分支列表。 前面有*的就是现在的分支。

    D:	utorial>git branch
      issue1
    * master
    

    切换分支

    若要在新建的issue1分支进行提交,需要切换到issue1分支(执行checkout命令以退出分支)

    D:	utorial>git checkout issue1
    Switched to branch 'issue1'
    

    在切换到issue1分支的状态下提交,历史记录会被记录到issue1分支。在myfile.txt添加add命令的说明后再提交。

    D:	utorial>git commit -m "添加add说明"
    On branch issue1
    nothing to commit, working tree clean
    

    要去myfile.txt文件里写点东西,不然报工作树是干净的

    D:	utorial>git add myfile.txt
    
    D:	utorial>git commit -m "添加add说明"
    [issue1 ce62510] 添加add说明
     1 file changed, 2 insertions(+), 1 deletion(-)
    

    合并分支

    向master分支合并issue1分支的修改。(执行merge命令以合并分支)

    f需要先切换master分支,然后把issue1分支导入到master分支。

    D:	utorial>git checkout master
    Switched to branch 'master'
    
    D:	utorial>git branch
      issue1
    * master
    

    合并

    D:	utorial>git merge issue1
    Updating 62fac81..ce62510
    Fast-forward
     myfile.txt | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
    

    删除分支

    既然issue1分支的内容已经顺利地合并到master分支了,现在可以将其删除了。(branch命令指定-d选项执行,可删除分支)

    issue1分支被删除了。您可以用branch命令来确认分支是否已被删除。

    D:	utorial>git branch -d issue1
    Deleted branch issue1 (was ce62510).
    
    D:	utorial>git branch
    * master
    

    并行操作

    创建2个分支来尝试并行操作

    首先创建issue2分支和issue3分支,并切换到issue2分支

    D:	utorial>git branch issue2
    
    D:	utorial>git branch issue3
    
    D:	utorial>git checkout issue2
    Switched to branch 'issue2'
    
    D:	utorial>git branch
    * issue2
      issue3
      master
    

    在issue2分支的myfile.txt添加commit命令的说明后提交。

    D:	utorial>git commit -m "添加commit说明"
    On branch issue2
    nothing to commit, working tree clean
    

    要去myfile.txt文件里写点东西,不然报工作树是干净的

    D:	utorial>git commit -m "添加commit说明"
    [issue2 9f80320] 添加commit说明
     1 file changed, 2 insertions(+), 1 deletion(-)
    

    接着,切换到issue3分支。

    D:	utorial>git checkout issue3
    Switched to branch 'issue3'
    

    打开myfile.txt档案。由于在issue2分支添加了commit命令的说明,所以issue3分支的myfile.txt里只有add命令的说明。

    D:	utorial>git add myfile.txt
    
    D:	utorial>git commit -m "添加commit说明"
    On branch issue3
    nothing to commit, working tree clean
    

    要去myfile.txt文件里写点东西,不然报工作树是干净的

    D:	utorial>git add myfile.txt
    
    D:	utorial>git commit -m "添加commit说明"
    [issue3 ed64474] 添加commit说明
     1 file changed, 3 insertions(+), 1 deletion(-)
    

    这样,添加commit的说明的操作,和添加pull的说明的操作就并行进行了

    解决合并的冲突

    把issue2分支和issue3分支的修改合并到master。

    切换master分支后,与issue2分支合并

    D:	utorial>git checkout master
    Switched to branch 'master'
    
    D:	utorial>git merge issue2
    Updating ce62510..9f80320
    Fast-forward
     myfile.txt | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
    

    执行fast-forward(快进)合并。

    接着合并issue3分支。

    D:	utorial>git merge issue3
    Auto-merging myfile.txt
    CONFLICT (content): Merge conflict in myfile.txt
    Automatic merge failed; fix conflicts and then commit the result.
    

    自动合并失败。由于在同一行进行了修改,所以产生了冲突。

    在发生冲突的地方,Git生成了内容的差异。请做以下修改:

    D:	utorial>git add myfile.txt
    
    D:	utorial>git commit -m "合并issue3分支"
    [master 4013bd5] 合并issue3分支
    

    用rebase合并

    合并issue3分支的时候,使用rebase可以使提交的历史记录显得更简洁。

    现在暂时取消刚才的合并。

    D:	utorial>git reset --hard
    HEAD is now at 4013bd5 合并issue3分支
    

    切换到issue3分支后,对master执行rebase。

    D:	utorial>git checkout issue3
    Switched to branch 'issue3'
    
    D:	utorial>git rebase master
    First, rewinding head to replay your work on top of it...
    Fast-forwarded issue3 to master.
    

    rebase的时候,修改冲突后的提交不是使用commit命令,而是执行rebase命令指定 --continue选项。若要取消rebase,指定 --abort选项。

    D:	utorial>git add myfile.txt
    
    D:	utorial>git rebase --continue
    fatal: No rebase in progress?
    

    这样,在master分支的issue3分支就可以fast-forward合并了。切换到master分支后执行合并。

    D:	utorial>git checkout master
    Already on 'master'
    
    D:	utorial>git merge issue3
    Already up to date.
    

    合并分支使用Merge还是Rebase?

    Rebase 和 merge 都是被设计用于集成你所做的改变从一个分支到另一个分支,只是通过不同的方式。虽然目的相同,但不同的方式有不同的优缺点。

    Merge

    • 简单易理解
    • 源分支和目标分支相互分离
    • 保留功能分支的提交历史和分支图形
    • 分支一旦较多显示比较混乱

    Rebase

    • 简化复杂的记录且线性可读
    • 没有合并的记录
    • 多个commit冲突时必须一个个提交去修改
    • 对远程分支rebase需要force push

    参考文章

    使用git rebase合并多次commit

    用rebase合并

  • 相关阅读:
    删除CSDN上传图片水印
    Win10任务栏中隐藏/恢复日期显示
    使用idea和gradle编译spring5源码
    错误:找不到或无法加载主类
    判断字符串是否为数字
    mysql根据json数据过滤
    mysql当不存在时插入
    org.apache.xerces.parsers.SAXParser
    mybatis mapper判断if条件写法
    《Java面向对象编程》
  • 原文地址:https://www.cnblogs.com/d534/p/15479342.html
Copyright © 2011-2022 走看看