Git 简单入门(二)
分支管理
- 分支的作用
- 提交不完整的代码到主分支上会导致别人不能正常开发
- 如果等代码全部写完再提交,存在丢失每天进度的风险
详见:https://segmentfault.com/q/1010000010105733
- 新建与分支合并
- 过程
- Git 创建分支(例:dev) 除了增加一个dev指针外,让HEAD指向dev,工作区的文件没有变化
- 然后对工作区的修改和提交就是针对dev分支(HEAD指向的分支)
- 分支合并,直接将master指向dev的当前提交
- 然后可以将dev分支(dev指针)删掉
- 命令,例:
创建分支
创建dev分支并切换到dev分支git checkout -b dev
上面的命令相当于
git branch dev
git checkout dev
切换分支
git checkout master
合并指定分支到当前分支
- 正常合并
git merge dev
- 如果在这个过程之前 主分支上面的代码也被你的同伴修改过,这样会出现冲突,这时候使用 git status 可以查看一下冲突的文件,然后可以去该文件中将Git <<<<<,=====,>>>>>> 标记出的不同分支的内容,解决完冲突后保存,然后再进行提交一次即可
- 正常合并
合并完成后可以删除dev分支
git branch -d dev
查看分支
git branch
如果没有合并分支就要把分支删除,可以使用:
git branch -D 分支
注:
1. 合并分支时,Git一般默认使用 Fast forward 模式,删除分支后,会丢掉分支信息
2. 使用 git merge --no-ff -m"comment" dev 会在merge分支的时候生成一个新的commit,可以从分支历史上看出分支信息 - 过程
- 常见分支策略
- master 分支是非常稳定的,仅用来发布新版本
- dev 分支是不稳定的,在dev上干活
- 在往下面建立一些自己的分支
- Bug分支
场景:当工作进行到一半,没办法提交,突然接到一个要在两个小时解决一个bug的通知使用 stash功能将当前工作现场保存起来
git stash
却换到需要修复Bug的分支,如(master),新建一个临时分支
然后修改Bug,提交到临时分支上
确认Bug分支没问题的话,可以却换回master分支,然后合并Bug分支
最后删除Bug分支
找回刚刚保存起来的工作场景,命令:
git stash list
#显示 stash@{0}: WIP on dev: 6224937 add merge
然后恢复之前的工作场景,两种方法:
- git stash apply stash@{0} 恢复后stash内容并不删除
- git stash pop stash@{0} 恢复的同时将stash删除了
- Feature分支
- 就是针对要开发的功能新建一个功能分支,开发完成后,完成合并后将该功能分支删除
- 本地与远程
- 当从远程库克隆的时候,Git自动将本地的master分支和远程的master分支对应起来,远程仓库的默认名称是origin
- 查看远程库的信息用 git remote -v
- 推送分支
经测试,不管你提交时在哪个分支,如果执行 git push origin master 时 会将本地的master分支推送到远程的master分支,如果执行 git push origin dev 时 ,会将本地发dev分支推送到远程的dev分支,但是如果在dev分支上 执行 git pull origin master 时,会吧master分支上的内容拉下来并且与当前的分支合并 - 如果git pull 提示提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用 git branch --set-upstream branch-name origin/branch-name。
- 多人协作的工作模式:
- 首先尝试 git push origin branch-name 推送自己的修改
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull 视图合并
- 如果合并有冲突则解决冲突,并在本地提交
- 没有冲突或者解决掉冲突后,使用 git push origin branch-name 推送
- 远程分支管理
- 推送本地分支 dev 到 远程分支 dev 并建立关联关系
- 远程已经有dev 并且已经关联本地分支dev 使用 git push
- 远程已经有dev 但是未关联本地dev 使用 git push -u origin/dev
- 远程没有dev分支 使用 git push origin dev:dev
- 删除远程分支 (远程分支删除后本地分支还在)
执行下面两条命令- git branch -r -d origin/branch-name #删除对分支的追踪
- git push origin :branch-name #删除远程分支
- 推送本地分支 dev 到 远程分支 dev 并建立关联关系
标签管理
在发布版本的时候,可以在版本库中打一个标签,这样就唯一确定了打标签时刻的版本。在需要的时候可取某个标签的版本。标签相当于是版本库的一个快照,可以自定义标签名字,便于查找
- 管理标签
创建标签
git tag tag_name
上面的命令默认是打在最新提交的commit上的,如果有时候忘记打标签的话,可以找到历史提交的commit id 然后打上标签即可
git tag tag_name commit_id可以创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字
git tag -a -m "blablabla..."还可以通过 -s 用私钥 签名一个标签:
git tag -s -m "blablabla..."
签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错查看标签
- 用git show tag_name 查看标签的说明
- git tag 查看所有标签
删除标签
git tag -d tag_name远程标签
创建的标签默认只存储在本地,不会自动推送到远程- 推送某个标签到远程
git push origin tag_name - 一次性推送全部尚未推送到远程的本地标签
git push origin --tags - 如果标签已经推送到远程,要将远程标签删除
- 先将本地标签删除 #这个其实可以不做
git tag -d tag_name - 从远程删除
git push origin :refs/tags/tag_name
- 先将本地标签删除 #这个其实可以不做
- 推送某个标签到远程
忽略特殊文件
有些文件放在Git工作目录中,但是又不能提交它们,不如数据库密码等配置文件,但是每次git status的时候都会显示好多 Untracked files ... , 这可以通过在Git 工作目录中创建一个 .gitignore 文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件
.gitignore 参考 : 见GitHub的示例
忽略文件的原则:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
配置别名
我们有时候在面对非常长的命令会头疼,这时候可以给这些命令配置一个别名,这样就可以使用别名来进行相关操作了
命令:git config --global alias.别名 原名 # 注意,当原名是一个单词的时候不需要加引号,如果超过了一个单词,原名就需要用单引号包括
例:
git config --global alias.st status
执行过之后,下次再需要执行 git status 时就可以直接输入 git st 即可
示例:
git config --global alias.unstage 'reset HEAD'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
注意:
- 配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
- 每个仓库的Git配置文件都放在.git/config文件中,当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
- 配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。
本文参考: 廖雪峰的官方网站
如需转载请注明出处:http://www.cnblogs.com/zhuchenglin/p/8820186.html
Git 简单入门(二)的更多相关文章
- git简单入门
git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...
- git 简单入门
首先了解一下git的是什么: [百度百科解释]Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.[2] Git 是 Linus Torvalds 为了帮助管理 ...
- ubuntu git 简单入门【转】
转自:http://blog.chinaunix.net/uid-20718384-id-3334859.html 1. 安装 sudo apt-get install git-core 2. 初始 ...
- jQuery简单入门(二)
2.Dom操作 A.DOM分类 个人认为在jQuery中这些分类被弱化了,有兴趣的读者可以自行补充这方面的知识: aa.DOM Core bb.HTML -DOM cc. CSS-DOM B.jQue ...
- Git 简单入门(一)
Git 简介 Git 是目前世界上最先进的分布式版本控制系统 分布式和集中式 集中式版本控制系统 版本库放在中央服务器,干活之前先从中央服务器取得最新版本,然后开始干活,活干完后将自己干的成果推送给中 ...
- Git简单入门教程
1.下载Git,360的软件管家里搜 2.安装Git,下载好之后安装到指定路径下 安装方法有多个复选框的把第一个也选上,其他默认直接next,最后一步什么都不选 3.配置用户信息:(右键-->g ...
- [转]VS2015 Git 源码管理工具简单入门
VS2015 Git 源码管理工具简单入门 1.VS Git插件 1.1 环境 VS2015+GitLab 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本 ...
- Python 简单入门指北(二)
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
- Redis入门很简单之二【常见操作命令】
Redis入门很简单之二[常见操作命令] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存 Redis提供了丰富的命令,允许我们连接客户端对其进行直接操作.这里简单介绍一 ...
随机推荐
- C# 7.0特性
一.out的形参变量无需再提前声明 befor: "; int numericResult; if (int.TryParse(input, out numericResult)) Cons ...
- 移动端添加横向滚动条&隐藏
添加横向滚动条ul { display: flex; overflow-x: auto; overflow-y: hidden; white-space: nowrap; }隐藏滚动条,保留滚动效果 ...
- Assets.car 解压工具 cartool 使用报错 segmentation fault cartool 解决方案
1 cartool 下载地址 https://github.com/steventroughtonsmith/cartool 由于在macOS Mojave系统上 之前代码会报错需要修改main.m ...
- 处理H5新标签方法
语义化 HTML5中加入了更加具有语义化的标签,比如header,nav,footer等,可以为搜索引擎优化,让爬虫能更好地理解网页结构. 但是对于新标签的兼容性不是很好,IE9以下旧版本不支持新的语 ...
- c编译步骤
这几天查编译问题时,在头文件中加入某些错误信息,却发现没有编译报错.想了一下可能是,还未进行到语法分析阶段. 这里再了解一下编译过程. 一般而言代码编译包含了四个阶段的处理,即预处理(也称预编译,Pr ...
- 学习笔记_J2EE_SpringMVC_01_入门
1. 概述 笔者作为一个不太正经的不专业佛教信仰者,习惯了解事物的因果关系,所以概述就有点BBB...了.如果不喜欢这些的,请自行跳过概述章节,直接进入第二章的操作实践:2 入门示例. 1.1. ...
- Linux 常用命令介绍
介绍常用命令,在忘记时便于即使查询 复制.移动.删除 cp.mv.rm.pwd 1. CP 介绍 用法:CP [-adfilprsu] 源文件 目标文件 参数:参数说明: -a:是指arc ...
- Dubbo序列化多个CopyOnWriteArrayList对象变成同一对象的一个大坑!!
环境: win10 + jdk 1.8 + dubbo 2.5.10 问题描述: 当一个对象(此对象内包含多个CopyOnWriteArrayList对象) 作为参数调用RPC接口后, 服务提供者拿到 ...
- Centos设置防火墙与开放访问端口
一. jeuxs在启动后可能会出现启动jexus成功,但是访问失败.但是在服务器内部访问没问题. 列出所有端口 netstat -ntlp 查看已经开放的端口: firewall-cmd --list ...
- PHP如何处理emoji表情存入utf8的数据库
一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串.这是怎么回事呢? 原来是因为Mysql的utf8字符集是3字节的,而em ...