Git的使用
Git是什么?
Git是一个分布式版本控制系统,能够有效,高速的处理项目版本管理,GitHub是一个基于Git远程文件托管平台
配置:绑定到GitHub上
- 配置用户名:git config --global user.name "GitHub的用户名"
- 配置邮箱:git config --global user.email "GitHub的注册邮箱"
版本库
版本库,或者叫仓库,可以理解为一个目录,这个目录里面的所有文件都可以被Git管理起来,每一个文件的修改,删除,Git都能跟踪到,以便任何时刻都有一个追踪历史,或者在将来的某个时候可以还原
工作区与版本库
工作区:仓库所在的目录
版本库:.git目录是Git的版本库,版本库有三部分组成:
- 暂存区
- 自动创建的一个分支(master)
- 指向master的指针(HEAD)
以git目录为例:
创建版本库
- 创建一个空目录
- 在Git bash中cd进入该目录(注意,不是window里的那个路径,所以要你把那个文件拖到git bash里,那么就会自动转化为linux的路径了)
- 使用git init命令初始化这个目录,让它变成Git可以管理的仓库(多了一个.git隐藏目录)
添加文件到版本库
- 在上述创建的目录里创建文件
- 然后使用git add 文件名(或者.添加当前目录的所有文件)添加到仓库
- 最后使用git commit -m "注释信息"提交到仓库
时光穿梭机
- git status:这个命令可以让我们掌握仓库的状态
- git diff:查看修改的内容
- git log:显示最近到最远提交的日志
-
- git log --graph:查看分支合并图
- git log --pretty=oneline:只查看版本号的一行
- git reflog:记录每一次命令 版本回退:当版本回退之后使用git log就看不到这个版本了,但是还存在,如果还要回退,就需要记录它具体的版本,利用这个回退
- 回退上一个版本:git reset --hard HEAD^
- 回退上上一个版本:git reset --hard HEAD^^
- 回退到上100个版本 :git reset --hard HEAD~100
- 回退到具体的版本:git reset --hard 具体版本(也就是上面显示的一串黄色的字符)
创建远程仓库
上面创建的都是本地仓库,开发的时候先有远程库,然后从远程库克隆到本地,创建远程前,先创建SSH_Key,其作用是只允许你认可的电脑向GitHub上传
创建SSH_key
- 在终端上输入ssh-keygen -t rsa -C "GitHub的注册邮箱"
- 立即.ssh目录的位置
- 可以发现.ssh目录下有id_ras(私钥),id_ras.pub(公钥),记录公钥的内容
- 登录GitHub,点击settings
- 在SSH and GPGkey里点击NEW ssh key
- 填上记录的公钥
- 测试秘钥是否通过ssh -T git@github.com,如果通过了,钥匙就会变绿
创建远程仓库
- new repository
- create repository
关联远程仓库
git remote add origin 远程仓库地址
删除关联
git remote rm origin
推送本地仓库内容
git push origin master
特殊文件.gitignore:在这个文件写上该目录里的一些文件名的话,当推送到远程仓库的时候,将忽略这些文件
注意:需要先把远程库中的内容拉取到本地,否则会报错
拉取远程仓库的内容
git pull origin master --allow-unrelated-histories(第一次拉取的时候可能需要加这个参数)
远程库克隆
git clone 远程库地址(上面图中的地址)
分支管理
分支的作用就是在不干扰别人的情况下,创建属于自己的分支,别人在各自的分支上正常工作,自己在自己的分支上工作,想提交就提交,等写完了,就合并原来的分支,这样又安全,又不影响别人
master分支
在版本回退中,每一次提交,Git都把它们串成一条时间线,在Git里,这个分支叫做主分支,也就是master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的。所以HEAD指向的是当前分支,每一次提交,master分支都会向前移动
创建与合并分支
- git branch [分支名]:如果不写分支名,那么就查看所有的分支,当前分支前面有一个*,如果写分支名,那么就创建分支
- git checkout 分支名:切换分支
- git checkout -b 分支名:创建并切换
如果我们在dev分支上添加,修过文件并提交,那么在master分支上看不见
把dev分支的内容合并到master分支上,需要进入master分支,然后输入git merge dev(分支名)
删除分支
git branch -d 分支名
删除远程分支
- git push origin :分支名
- git push origin --delete 分支名
在git中,有可能出现,两个人同时提交合并,那么该分支不知道保留谁的,去掉谁的,那把两个分支的内容都添加进来,这个需要我们手动解决
分支策略
在平时的开发中,master分支应该是非常稳定的,仅用来发布新版本,平时不应该在上面干活,干活应该都要在dev分支上,也就是我们每个人都在各自的分支上干活,然后合并到dev分支上,而不是合并到master分支上
多人协作
从远程库中克隆的时候,无论有多少个分支,默认都只克隆master分支的内容,想要在dev分支上开发,就需要创建origin的dev分支到本地,使用git checkout -b dev origin/dev
工作模式:
当使用git push origin 分支名 推送失败的话,可能是因为远程分支比你的本地更新,需要用git pull先合并
如果合并有冲突,那么需要解决冲突,并提交,解决冲突后就可以用git push origin 分支名推送
如果git pull提示"no tracking information",则说明本地分支和远程分支的链接没有创建,用命令git branch --set-upstream 分支名 origin/分支名
标签管理
在发布一个版本的时候,我们可以在版本库中打一个标签,这样就可以唯一确地打标签时刻的版本。将来要取某个的版本的时候,把相对应标签的版本取出来即可,标签也就是版本的一个快照
常用的命令:
- git tag 标签名:打标签
- git tag :查看所有标签
- git tag 标签名 commitID:指定commd id打标签
- git tag -a 标签名 -m “标签信息” :指定标签信息
- gti checkout 标签名:切换到指定标签
- git show 标签名:查看说明文字
- git tag -d 标签名:删除标签
- git push origin 标签名:推送标签到远程库
- git push origin --tags:一次性推送全部尚未推送到远程的本地标签
- 删除已经推送到远程的标签:
- 先从本地删除:git tag -d 标签名
- 再从远程删除: git push origin :refs/tags/标签名