• 002. git 分支管理


    git分支

    git分支,从本质上来讲仅仅是指向提交对象的可变指针,在这一点上与svn是有着本质区别,svn的分支实际就是个目录而已.

    git默认分支名字是 master,在多次提交操作后,你其实已经有一个指向最后那个提交对象的master分支. 它会在每次的提交操作中自动向前移动.

    1. git log日志查看提交历史

    git log  --oneline --decorate    #简要信息,可以看较多日志,里面有个(HEAD,master) 有HEAD的就是主分支.当前分支
    git log	 #信息较全,查看的日志单条很长.  还可以使用 git log -10  查看10条
    git log -p  #详细的日志信息,可以查看每次的提交内容
    --no-ff -m:不使用fast-forward方式合并,保留分支的commit历史   : git merge --no-ff -m
    --squash:使用squash方式合并,把多次分支commit历史压缩为一次 : git merge --squash
    

    2. 分支的创建修改删除增加查看切换

    1. git创建分支
    [root@master 777]# git branch    #查看分支
    * master                       #多分枝的情况下,带星号的是主分支master
    
    ##创建分支
    [root@master 777]# git branch chenleilei     #创建一个chenleilei的分支
    
    
    2. 查看分支 git branch
    [root@master 777]# git branch 
      chenleilei
    * master    #---带 * 表示当前所在分支.
    
    [root@master 777]# git log --oneline --decorate
    fa4e4b2 (HEAD, master, chenleilei) commit a    ## 有HEAD标识的就是当前分支.
    68fec00 commit a
    e1ebcce commit a
    3b65d3a commit a
    202ba55 commit a
    23be0b9 commit a
    
    3. 切换分支 git checkout
    ## 多个分支指向同一个分支,他们分支内容是一样的.
    [root@master 777]# git checkout chenleilei
    Switched to branch 'chenleilei'       ## 提示切换到了 chenleilei分支
    
    ## 检查是否切换
    [root@master 777]# git branch
    * chenleilei                ## 可以看到chenleilei这个分支已经成为了 主分支.
      master
      
    4. git 删除分支  git branch -d [分支名] 
    [root@master 777]# git branch -d chenleilei
    Deleted branch chenleilei (was fa4e4b2).   ##成功删除
    
    报错: error: Cannot delete the branch 'xxx' 需要切换到其他分支[git checkout 分支名]才能删除当前分支
    [root@master 777]# git branch     #查看分支,已经删除了 chenlelei分支.
    * master
    
    5. 查看分支
    [root@master 777]# git branch    #可以查询到有那些分支
    * master
    

    注意:
    分支的切换也会让HEAD切换,一旦master切换为了 chenleilei 分支,那么chenleilei分支就会成为master分支,HEAD也会转移到 chenleilei 分支中.

    [root@master 777]#  git log --oneline --decorate
    fa4e4b2 (HEAD, master, chenleilei) commit a      ## chenleilei分支是master分支,有HEAD标识.
    68fec00 commit a
    e1ebcce commit a
    3b65d3a commit a
    202ba55 commit a
    23be0b9 commit a
    

    3. 分支文件删除创建切换分支

    1. 删除分支:
    [root@master 777]# git branch -d leilei
    Deleted branch leilei (was 8ed3d9a).
    
    2. 创建分支:
    [root@master 777]# git branch leilei
    [root@master 777]# git branch 
      leilei
    * master
    
    3. 切换分支:
    [root@master 777]# git checkout leilei
    Switched to branch 'leilei'
    [root@master 777]# git branch 
    * leilei
      master
    

    4. 分支文件管理

    1.分支同步master的文件
    master创建文件:
    [root@master 777]# touch master-999
    [root@master 777]# git add .
    [root@master 777]# git commit -m master-999
    
    2. 分支同步master文件:
    命令: git merge master 
    [root@master 777]# ls                #查看是否有文件
    [root@master 777]# git merge master   #同步master的文件
    Updating b1b3da5..5a6a8f5
    Fast-forward
     master-999 | 0
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 master-999
    [root@master 777]# ls
    master-999
    
    
    #删除分支中文件
    git rm -f [文件名]
    git commit  -m "remove [文件名]"    ## 文件名只是注释说明,说明这次提交删除了哪个文件.
     
     
    ##注意要点
    1. 不同分支文件不会被看到
    2. 创建文件后需要 git commit -m "文件名" 才会被提交
    3. git branch 可以查看现有分支
    4. 切换分支使用 git checkout [分支名]
    5. 删除分支需要使用 [ git branch -d [分支名] ],当前分支下无法删除当前分支,需要切换分支后执行删除操作.
    

    5. 分支切换,文件的查看合并git:

    git来取其他分支代码:
    git checkout master  #切换分支
    git branch  #查看分支
    git push origin xxx  #提交到指定分支.
    
    1. master 分支代码提交与合并
    
    1.1 代码提交到chenleilei分支:
     [root@master 777]# touch leilei001
     [root@master 777]# echo  leilei001 >> leilei001
     [root@master 777]# git add .
     [root@master 777]# git commit -m "leilei001"
     [leilei 2516f73] leilei001
      1 file changed, 1 insertion(+)
      create mode 100644 leilei001
     [root@master 777]# git push origin  chenleilei  提交到chenleilei分支
     
     git push <远程主机名> <本地分支名>  <远程分支名> ,例如 git push origin master:refs/for/master 
     
     1.2 chenleilei分支上执行下面命令是让chenleilei代码合并到master中:
     git checkout master 
     git merge leilei
     #注意 这只有在 master分支下才可以执行合并操作.
    --------------------------------------
    

    6. git diff 对比代码

    案例: 使用 echo "1111111" >>1.txt 然后不执行git add . 和执行 git add . 后出现的以下两种情况:

    6.1 git diff [本地工作目录和暂存区对比]

    [root@master 777]# echo 1111111 >> 1.txt
    [root@master 777]#  git diff 1.txt
    diff --git a/1.txt b/1.txt
    index 8ad79bd..af2c243 100644
    --- a/1.txt
    +++ b/1.txt
    @@ -1 +1,2 @@
     1111111
    +1111111
    有输出说明他是使用本地工作目录和暂存区对比.
    
    [root@master 777]# git add  1.txt   # 提交到暂存区后
    [root@master 777]# git diff 1.txt   # 没有输出
    没有输出,说明它是在用本地工作目录和暂存区进行对比 
    

    6.2 git diff --cached [本地仓库和暂存区对比]

    6.1中 提交后没有输出,此时使用  git diff --cached 来进行对比
    [root@master 777]# git diff --cached 1.txt
    diff --git a/1.txt b/1.txt
    index 8ad79bd..af2c243 100644
    --- a/1.txt
    +++ b/1.txt
    @@ -1 +1,2 @@
     1111111
    +1111111
    提交后进行对比有输出,说明他是 使用本地仓库和暂存区进行对比
    
    
    总结: 
    创建文件后. 他的文件就存储在本地工作目录, 使用git add 提交了数据后他就会被提交到 本地仓库.
    此时使用, git diff --cached 进行对比后, 就是使用本地仓库和暂存区进行对比.因为有过修改,所以必定有修改的输出提示.
    

    7. 分支合并

    7.1 不同内容的合并

    分支合并:master修改 master.txt文件[root@master 777]# echo  master >>master[root@master 777]# git add .[root@master 777]# git commit -m "master"[master e284598] master 1 file changed, 1 insertion(+) create mode 100644 master1. 其他分支修改master.txt文件:[root@master 777]# git checkout leilei Switched to branch 'leilei'[root@master 777]# git merge master gtiMerge made by the 'recursive' strategy. master | 1 + 1 file changed, 1 insertion(+) create mode 100644 master[root@master 777]# cat master master2. leilei分支添加内容到 master[root@master 777]# echo  111 >> master 3. 合并到分支[回到需要合并的分支,比如我要合并到master分支,那么先要回到master][root@master 777]# git checkout master M	masterSwitched to branch 'master'[root@master 777]# git merge leilei Updating e284598..edc2539Fast-forward[root@master 777]# cat master  master111              #<<<------- 在leilei分支上修改的内容合并到了 master分支中的文件里.
    

    7.2 [多个分支同时修改一个文件]

    都有一个 master.txt 文件的时候进行合并解决冲突办法.

    master 和 leilei 分支分别创建 master.txt 并添内容:master :[root@master 777]# git checkout  master Switched to branch 'master'[root@master 777]# touch  master.txt[root@master 777]# echo master >master.txt[root@master 777]# cat master.txt master[root@master 777]# git add .[root@master 777]# git commit -m "modify a"leilei : [root@master 777]# git checkout leileiSwitched to branch 'leilei'[root@master 777]# echo leilei >master.txt[root@master 777]# cat master.txtleilei[root@master 777]# git add .[root@master 777]# git commit -m "modify"#leilei分支合并到master:#回到master执行合并:[root@master 777]# git checkout master Switched to branch 'master'[root@master 777]# git branch   leilei* master#执行合并:[root@master 777]# git merge leilei Auto-merging master.txtCONFLICT (add/add): Merge conflict in master.txtAutomatic merge failed; fix conflicts and then commit the result.  ##提示合并失败了,文件有冲突需要解决.#有冲突的情况下查看状态:[root@master 777]# git status# On branch master# You have unmerged paths.#   (fix conflicts and run "git commit")## Unmerged paths:#   (use "git add <file>..." to mark resolution)##	both added:         master.txt#no changes added to commit (use "git add" and/or "git commit -a")#提示冲突内容已经写入到了文件中.需要自己手工解决冲突:[root@master 777]# cat master.txt<<<<<<< HEAD                         ## 提示master分支内容是master ,leilei分支内容是 leileimaster                               ## 他们内容不一致,需要手工确认.如果需要把两个都保留可以做下面的修改=======leilei>>>>>>> leilei#文件内容修改前:<<<<<<< HEADmaster=======leilei>>>>>>> leilei#文件内容修改后:masterleilei保存修改文件.[注意:这里是系统提示冲突文件,自己要修改成自己觉得对的情况,我上面因为只是合并两行,所以我觉得 master leilei 这两行都应该在,所以其他内容我就删除了,这样就可以了,改好了执行保存就好.]#修改完成后继续提交:[root@master 777]# git add .[root@master 777]# git commit  -m "change file"[master 3dde069] change file#此时再查看工具区:[root@master 777]# git status# On branch master  nothing to commit, working directory clean   ##已经没有报错了.#这些问题可以在log中展现出来:[root@master 777]# git log  --oneline --decorate33ae380 Merge branch 'master' into leilei5124e49 ac1ab865 a2860c89 abf5f3ed master585e89b modify leilei2ca9a86 aedc2539 Merge branch 'master' into leileie284598 master
    

    微信赞赏

    支付宝赞赏

  • 相关阅读:
    获取当前日期的年、月、日
    去掉后端返回过来的 % 且保留 2 位小数
    uni-app 长按复制
    rabbit——部署备份
    Mysql——查询语句备份
    Redis——常用命令
    luajit——编译运行lua
    Mac——无法退出移动硬盘解决办法
    Java——Function接口的使用
    Java——在运行mvn install或mvn package时跳过Test
  • 原文地址:https://www.cnblogs.com/superlinux/p/15385085.html
Copyright © 2020-2023  润新知