zoukankan      html  css  js  c++  java
  • Git系列五之分支管理

    1.Git分支管理

    分支即是平行空间,假设你在为某个手机系统研发拍照功能,代码已经完成了80%,但如果将这不完整的代码直接提交到git仓库中,又有可能影响到其他人的工作,此时我们便可以在该软件的项目之上创建一个名叫“拍照功能”的分支,这种分支只会属于你自己,而其他人看不到,等代码编写完成后再与原来的项目主分支合并下即可,这样即能保证代码不丢失,又不影响其他人的工作。 

    fenzhi 
    说明: Git团队合作流程图

    一般在实际的项目开发中,我们要尽量保证master分支是非常稳定的,仅用于发布新版本,平时不要随便直接修改里面的数据文件,而工作的时候则可以新建不同的工作分支,等到工作完成后在合并到master分支上面,所以团队的合作分支看起来会像上面图那样。 

    fenzhi2 
    说明: Git分支示意图

    生产代码提交方式

    1.1创建本地分支

      首先创建本地dev分支

    1. [root@git-node1 demo]# git branch dev
    2. [root@git-node1 demo]# git branch //查看本地分支
    3. dev
    4. * master

    1.2切换本地分支

      a、切换分支至刚建立dev分支

    1. [root@git-node1 demo]# git checkout dev
    2. 切换到分支 'dev'
    3. [root@git-node1 demo]# git branch
    4. * dev
    5. master

      b、切换分支发生冲突会导致无法切换对应分支,可使用-f强制切换

    1. [root@git-node1 demo]# git checkout -f master
    2. 切换到分支 'master'
    3. [root@git-node1 demo]# git branch
    4. dev
    5. * master

    1.3合并本地分支

    现在,我们想把linux的工作成果合并到master分支上了,则可以使用”git merge”命令来将指定的的分支与当前分支合并 

    fenhzhi3 
    git合并分之示意图

      a.切换到dev分支

    1. [root@git-node1 demo]# git checkout dev
    2. 切换到分支 'dev'

      b.添加内容至index.html,并提交

    1. [root@git-node1 demo]# echo "Create new branch dev" >> index.html
    2. [root@git-node1 demo]# git add index.html
    3. [root@git-node1 demo]# git commit -m "new branch dev"
    4. [dev 1bf25ef] new branch dev
    5. 1 file changed, 1 insertion(+)
    6. create mode 100644 index.html

      c.切回master分支,合并dev分支

    1. [root@git-node1 demo]# git checkout master
    2. 切换到分支 'master'
    3. [root@git-node1 demo]# git merge dev //master合并dev分支内容
    4. 更新 9573413..ead1936
    5. Fast-forward
    6. index.html | 1 +
    7. 1 files changed, 1 insertion(+)
    8. create mode 100644 index.html

    1.4删除本地分支

      合并完成dev分支后,可以放心的删除。

    1. [root@git-node1 demo]# git branch -d dev
    2. 已删除分支 dev(曾为 ead1936)。
    3. [root@git-node1 demo]# git branch
    4. * master

    1.5查看远程分支

      查看远程分支

    1. [root@git-node1 demo]# git branch -a
    2. * master
    3. remotes/origin/master

    1.6解决分支冲突

    但是Git并不能每次都为我们自动的合并分支,当遇到了内容冲突比较复杂的情况,则必须手工将差异内容处理点,比如这样的情况:

    fenzhi4 
    git分支冲突示意图

      a、创建linux分支并切换到linux分支

    1. [root@git-node1 demo]# git checkout -b linux
    2. 切换到一个新分支 'linux'

      b、添加1行内容,并推送到远程仓库

    1. [root@git-node1 demo]# echo "1.branch linux" > readme.txt
    2. [root@git-node1 demo]# git add readme.txt
    3. [root@git-node1 demo]# git commit -m "touch readme.txt"
    4. [linux 4580c3b] touch readme.txt
    5. 1 file changed, 1 insertion(+)
    6. create mode 100644 readme.txt
    7. [root@git-node1 demo]# git push origin linux //推送到远程仓库,创建并关联远程dev分支
    8. Counting objects: 4, done.
    9. Compressing objects: 100% (2/2), done.
    10. Writing objects: 100% (3/3), 294 bytes | 0 bytes/s, done.
    11. Total 3 (delta 0), reused 0 (delta 0)
    12. remote:
    13. remote: Create merge request for linux:
    14. remote: http://git-node1/root/git_demo/merge_requests/new?merge_request%5Bsource_branch%5D=linux
    15. remote:
    16. To git@git-node1:root/git_demo.git
    17. * [new branch] linux -> linux

      c、切换至master分支,添加readme.txt文件,并和linux分支相同位置,然后尝试合并

    1. [root@git-node1 demo]# echo "1.branch master" > readme.txt
    2. [root@git-node1 demo]# git merge linux
    3. 自动合并 readme.txt
    4. 冲突(添加/添加):合并冲突于 readme.txt
    5. 自动合并失败,修正冲突然后提交修正的结果。
    6. [root@git-node1 demo]# vim readme.txt //我们需要手动删除<<<,=======,>>>>
    7. <<<<<<< HEAD
    8. 1.branch master
    9. =======
    10. 1.branch linux
    11. >>>>>>> linux

      d、从新提交并添加至远程分支仓库

    1. [root@git-node1 demo]# git commit -m "merge branch linux readme.txt"
    2. [master 5f3f588] merge branch linux readme.txt
    3. [root@git-node1 demo]# git push origin master
    4. Counting objects: 7, done.
    5. Compressing objects: 100% (2/2), done.
    6. Writing objects: 100% (3/3), 339 bytes | 0 bytes/s, done.
    7. Total 3 (delta 0), reused 0 (delta 0)
    8. To git@git-node1:root/git_demo.git
    9. 4c7a145..5f3f588 master -> master

    1.7删除远程分支

      a、删除如上已经被合并过的linux分支。

    1. [root@git-node1 demo]# git push origin --delete linux
    2. To git@git-node1:root/git_demo.git
    3. - [deleted] linux

      b、或者push推送一个空的分支到远程test分支进行删除

    1. [root@git-node1 demo]# git push origin :test
    2. To git@git-node1:root/git_demo.git
    3. - [deleted] dev

    1.8Git分支小结

      Git鼓励大量使用分支,常见分支结构 
      dev分支 
      bug分支 
      新功能分支

      1. 命令 git branch //列出所有本地分支
      2. 命令git branch r //列出所有远程分支
      3. 命令git branch a //列出所有本地分支和远程分支
      4. 命令git branch [branch-name] //创建新分支
      5. 命令git checkout b [branch-name] //创建新分支,并且切换到该分支
      6. 命令 git branch --track [branch] [remote-branch] //创建新分支,与指定的远程分支建立追踪关系
      7. 命令 git checkout [branch-name] //切换至指定分支
      8. 命令 git branch set-upstream [branch] [remote-branch] //本地分支与远程分支建立追踪关系
      9. 命令 git merge [branch] //合并指定分支到当前分支
      10. 命令 git cherry-pick [commit] //选择一个commit,合并至当前分支
      11. 命令git branch d [branch-name] //删除本地分支
      12. 命令git push origin --delete [branch-name] //删除远程分支
      13. 命令git branch dr [remote/branch] //删除远程分支
  • 相关阅读:
    windows 资源管理器 运行非常缓慢或者无反应的解决办法
    RPC工作原理
    如何解决访问某些网站会跳出对话框标题为:address Book Viewer ,提示:"无法连接制定的目录服务.服务也许暂时不可用,或服务器名称不正确。"
    运行程序的时候出错MFC42D.dll找不到。
    谷歌金山词霸合作版升级后出现CBSText.dll故障
    Network drives trying to connect when offline
    解决任务挂起或冻结在Windows XP
    打开word或者office程序报错:Microsoft Visual C++ Runtime Library. Runtime Error!
    恢复officescan控制台密码
    excel中同时冻结窗格--冻结行列标题
  • 原文地址:https://www.cnblogs.com/nulige/p/6825628.html
Copyright © 2011-2022 走看看