zoukankan      html  css  js  c++  java
  • Git 分支合并代码

    Git 分为哪几个区:
    https://blog.csdn.net/qq_36672905/article/details/82776283
    在这里插入图片描述
    在这里插入图片描述
    Git的区域分为 工作区、暂存区、本地仓库区

    工作区(work directory):一般就是我们项目的根目录。

    本地仓库(repository):我们在为项目添加本地库之后,会在工作区生成一个如下图所示的隐藏目录“.git”,.git目录即为当前工作区的本地版本库

    暂存区(stage):版本库中设立一个暂存区(Stage or Index),作为用来直接跟工作区的文件进行交互,工作区文件的提交或者回滚首选都是通过暂存区,而版本库中除了暂存区之外,文件的提交的最终存储位置是分支(Branch),在创建版本库的时候默认都会有一个主分支(Master)

    1.首先 看目前位于哪个分支上 (前面带*号的为当前分支)

    git branch
    
    • 1

    2.创建本地分支 (若没有dev分支会创建并切换到dev2上)

    git checkout -b dev
    
    • 1

    3.在分支dev上 进行改动,改动完成 (commit之后的commitId需要保存)

    git add .
    git commit -m "提交信息"
    
    • 1
    • 2

    4.回到master分支

    git checkout master
    
    • 1

    5.更新代码

    git pull origin master
    
    • 1

    7.将dev的更新合并过来(commitId是dev在commit的时候的)

    git cherry-pick commitId
    
    
    • 1
    • 2

    当cherry-pick时,没有成功自动提交,这说明存在冲突

    
    $ git cherry-pick 2555c6e
    error: could not apply 2555c6e... [Description]:branch2 commit 2
    hint: after resolving the conflicts, mark the corrected paths
    hint: with 'git add <paths>' or 'git rm <paths>'
    hint: and commit the result with 'git commit'
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    8.有冲突手动解决然后 add,可以不commit,直接调用 add和continue 之后继续(等于再次commit)

    git add .
    git cherry-pick --continue
    
    • 1
    • 2

    https://blog.csdn.net/fightfightfight/article/details/81039050

    9.然后可以查看当前提交的信息(查看n条就写-n)

    git log -3
    
    • 1

    最后就可以push了

    git push -u origin master
    或者
    git push origin HEAD:refs/for/master
    
    • 1
    • 2
    • 3

    问题一
    此时已经push完成,但是别review代码时觉得你提交的commit 信息不合适,需要修改 ,amend之后要再次push ,这样就提交了,但是此次更改的是最近一次commit的信息

    git commit --amend
    git push origin HEAD:refs/for/master
    
    • 1
    • 2

    问题二
    现实是可能有好几个分支 cherry-pick ,这时候的操作

    1、比如时间点A拉取了最新的代码 ,然后创建一个本地分支dev,做了改动 然后git add .git commit -m " dev commit "

    2.然后回到master 分支 git checkout master,这是后发现远程代码更新了,然后就要git pull origin master 然后呢,这时候你有另一个功能要改,此时就要再创建一个dev1分支,然后在dev1上改动,改完之后 git add .git commit就可以回到master 上
    3.再次回到master 分支,然后就可以 将dev 和dev1 的改动合并过来了

    git cherry-pick 57f6eac(dev 的commitId)
    
    • 1

    如果有冲突就解决冲突,然后dev1 同理

        git add .
        git cherry-pick --continue
    
    • 1
    • 2

    4.都cherry-pick完成之后,git log -3看最上面的两次commit,因为每次的cherry-pick都相当于一次commit ,从log的信息可以看出,master分支上的这两次commit的信息 (commitId,和注释)就是dev和dev1分支上的commitId和注释。

    5.如果想提交的时候不想有两次的commit记录可以把这两次的commit合并
    (commitId是你要合并的两个commit后所形成的一个commitId需要在哪一个的commitId之后,就是要定位在哪个位置)

     git rebase -i commitId   
    
    • 1

    https://blog.csdn.net/u013276277/article/details/82470177
    然后点击i进入到vi 的编辑模式,然后要合并几条commit 就在第一条的commitId前写pick 以后的几条前都写s(squash的简写),这样这几条就会被合并了,保存的步骤 键盘 insert esc 然后输入冒号 :wq 这是退出保存

    pick 的意思是要会执行这个 commit
    squash 的意思是这个 commit 会被合并到前一个commit

    在这里插入图片描述
    保存之后,还是会进入一个可以vi 的编辑界面合并成新的commit的备注信息,这样就完成了。

    =============================================================

    另外一个问题,在上面的步骤2 比如,从dev回到master分支之后,pull下来更新的代码,然后创建dev1,打算去完成某一功能,但是需要dev中已经添加的一些资源,所以 我就把dev 的commit cherry-pick到了dev1上,然后继续完成功能,完成之后add commit

    然后回到了master分支,打算合并dev1分支的内容,当时想的是dev1已经合并了dev 的内容所以只需要合并dev1的commit就行了
    这样其实也没错,但是在master上cherry-pick 完dev1之后发现dev的内容并没有合并过来?
    为什么呢,因为我只是cherry-pick的dev1的commit ,并没有将dev1 cherry-pick dev的那次commit(签名说过cherry-pick也相当于一次commit) 拿过来,所以就是这样的 在dev1上相当于有两次commit,但是我拿了最后那一次的commitId,所以是需要再cherry-pick 分支dev的commitId ,这样代码才全部合并完成

    如图所示,c1才是对应的dev分支的内容,c2是dev1分支的内容,虽然在dev1上有dev代码的内容,但是在将dev1合并到master上去的时候,Git不是根据内容来合并的,是根据内容变化的节点来的,所以合并要合并两个节点的内容
    在这里插入图片描述

    参考文章:https://blog.csdn.net/u013276277/article/details/82470177
    https://blog.csdn.net/fightfightfight/article/details/81039050

    ===========================================================

    如果提交错了
    版本回退 回退到哪个版本

    git reset --hard  commitId
    
    
    • 1
    • 2

    有两种方法 :reset 和revert
    https://blog.csdn.net/yxlshk/article/details/79944535

    git 命令合并分支代码

    对于复杂的系统,我们可能要开好几个分支来开发,那么怎样使用git合并分支呢?

    合并步骤:

    1、进入要合并的分支(如开发分支合并到master,则进入master目录)

    git pull

    2、查看所有分支是否都pull下来了

    git branch -a

    3、使用merge合并开发分支

    git merge 分支名

    4、查看合并之后的状态

    git status 

    5、有冲突的话,通过IDE解决冲突;

    6、解决冲突之后,将冲突文件提交暂存区

    git add 冲突文件

    7、提交merge之后的结果

    git commit 

    如果不是使用git commit -m "备注" ,那么git会自动将合并的结果作为备注,提交本地仓库;

    8、本地仓库代码提交远程仓库

    git push

    git将分支合并到分支,将master合并到分支的操作步骤是一样的;

  • 相关阅读:
    windows下用QTwebkit解析html
    Redis不同数据类型的的数据结构实现
    对Object类中方法的深入理解
    Linux系统监控命令及定位Java线程
    Java集合源码学习(四)HashMap
    Java集合源码学习(三)LinkedList
    Java集合源码学习(二)ArrayList
    Dubbo应用与异常记录
    并发中的Native方法,CAS操作与ABA问题
    Java集合源码学习(一)Collection概览
  • 原文地址:https://www.cnblogs.com/sundaysme/p/13426901.html
Copyright © 2011-2022 走看看