设为首页 收藏本站
查看: 688|回复: 0

[经验分享] Git系列四之分支管理

[复制链接]
累计签到:29 天
连续签到:1 天
发表于 2018-9-17 06:44:14 | 显示全部楼层 |阅读模式
  笔者Q:552408925、572891887
  架构师群:471443208
  bjstack运维社区:524721466

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

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

  说明: Git分支示意图
  生产代码提交方式

1.1创建本地分支
  首先创建本地dev分支
  

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

1.2切换本地分支
  切换分支至刚建立dev分支
  

[root@git-node1 demo]# git checkout dev  
切换到分支 'dev'
  
[root@git-node1 demo]# git branch
  
* dev
  
master
  

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

[root@git-node1 demo]# git checkout -f master  
切换到分支 'master'
  
[root@git-node1 demo]# git branch
  
dev
  
* master
  

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

  git合并分之示意图
  1.切换到dev分支
  

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

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

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

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

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

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

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

1.5查看远程分支
  查看远程分支
  

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

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

  git分支冲突示意图
  1.创建linux分支并切换到linux分支
  

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

  2.添加1行内容,并推送到远程仓库
  

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

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

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

  4.从新提交并添加至远程分支仓库
  

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

1.7删除远程分支
  删除如上已经被合并过的linux分支。
  

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

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

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

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

命令 git branch //列出所有本地分支  
命令git branch –r  //列出所有远程分支
  
命令git branch –a  //列出所有本地分支和远程分支
  
命令git branch [branch-name]  //创建新分支
  
命令git checkout –b [branch-name] //创建新分支,并且切换到该分支
  
命令 git branch  --track [branch] [remote-branch]   //创建新分支,与指定的远程分支建立追踪关系
  
命令 git checkout [branch-name]      //切换至指定分支
  
命令 git branch –set-upstream [branch] [remote-branch] //本地分支与远程分支建立追踪关系
  
命令 git merge [branch] //合并指定分支到当前分支
  
命令 git cherry-pick [commit] //选择一个commit,合并至当前分支
  
命令git branch –d [branch-name]  //删除本地分支
  
命令git push origin --delete [branch-name]  //删除远程分支
  
命令git branch –dr [remote/branch]   //删除远程分支
  

  笔者Q:552408925、572891887
  架构师群:471443208
  bjstack运维社区:524721466



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-587985-1-1.html 上篇帖子: Git系列三之仓库管理 下篇帖子: Git系列五之标签管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表