1.简介
1.1 本地
- 本地库( 历史版本 )
- 临时存储( 暂存区 )
- 工作区 ( 写代码 )
- 远程库 ( 代码托管中心 )
工作区---git add---> 暂存区---git commit---> 本地库---git push---> 远程库
代码托管中心有: GitHub 码云 GitLab服务器(本地可以搭)
1.2 远程库
- 团队内部合作
- 跨团队协作
- 远程库A 通过fork 远程库B
- 当远程库B修改之后 pull request
- 远程库A 审核 远程库B,通过之后 merge到远程库A
2.本地库操作
2.1 签名和本地库初始化
(1).设置签名
git config --global user.name ”GitHub用户名”
git config --global user.email ”邮箱”
区分不同开发人员的身份,登录代码托管中心的邮箱和密码,与这个邮箱和密码没有关系
(2).命令级别
项目级别(仓库级别),仅在当前本地库有效
系统用户级别,登录当前操作系统的用户范围
优先级: 项目级别的优先级大于系统用户级别
git config是设置项目级别的
git config --global 是设置系统用户级别的
(3).本地库初始化
git init 来创建本地库
2.2常用命令
-
git status 查看日志
-
git add 123.txt (文件名) 添加这个文件到缓存区
-
git commit -m “这是第一次提交” 123.txt(文件名)
-
git log 查看曾经提交到本地仓库的日志
-
git log --pretty=oneline 作用同上, 只显示编号和信息
-
git log --online 作用同上,只显示编号的一部分
-
git reflog 记录每次执行的命令
-
git reset --hard HEAD^ 回退到上一个版本
-
git reset --hard HEAD^^ 回退到上两个版本
-
git reset --hard HEAD~100 回退到100之前的版本
-
git reset --hard 版本号 回退到具体某个版本
-
reset有三个参数
reset --soft 仅仅在本地库移动HEAD指针
reset --mixed 在本地库移动HEAD指针, 并且重置缓存区
reset --hard 在本地库移动HEAD指针, 并且重置缓存区, 重置我们的工作区
- 删除文件 并找回
前提: 删除前,文件在时的状态为提交到了本地
操作: git reset --hard [指针位置]
删除已提交到本地库: 指针位置指向历史记录
删除操作尚未提交到本地库: 指针位置使用HEAD
- 比较文件差异
git diff [文件名] 将工作区中的文件和暂存区进行比较
git diff [历史版本号] [文件名] 将工作区中的文件和本地库的某个历史版本进行比较
3.分支
3.1 什么是分支
- 在版本控制过程中, 使用多条线同时推进多个任务
3.2 分支操作
-
git branch -v, 打印分支
-
git branch 分支名, 创建分支
-
git checkout 分支名, 切换分支
-
git checkout -b 分支名 创建分支同时切换到该分支
-
git merge 分支名, 合并分支
-
git merge --no-ff把合并的记录添加到gitlog中
-
git branch -d 分支名 删除本地仓库的分支
-
在week分支下执行 git push origin --delete week 删除远程week分支( week是自己随便取的名字)
-
在week分支下执行 git push --set-upstream origin week 创建远程分支
3.3 解决冲突
当合并分支时,不同的分支更改同一个文件,更改的结果不同会产生分支冲突
- 对比文件更改的不同内容, 手动更改文件,并删除特殊符号,达到更改结果一致
- git add 文件名
- git commit -m " 备注信息" (此时commit 一定不能带文件名)
- git log --graph 查看分支合并图
3.4 撤销
- git checkout --123.txt
- 在add之前执行,撤回到与本地库相同
- 若已经add到缓存区,又有修改,但还没commit到仓库区,撤回到与缓存区相同
3.5 分支策略
- master主分支应该是非常稳定的,仅用来发布新版本的,平时不能在上面干活
- 每个人都在自己建的分支上干活, 然后合并到dev开发分支. 再由组长把dev分支的内容合并到master主分支.
- git checkout -b dev origin/dev 创建本地dev分支同时 创建远程分支dev
4. 托管中心(远程库) GitHub
4.1 生成秘钥
- 终端命令窗口 ssh-keygen -t rsa -C “邮箱”
- 在这个目录下 /c/users/Administrator/.ssh
- 复制id__ras和id__rsa.pub文件中的秘钥
- GitHub官网, 点击自己头像,再点击setting 复制秘钥于其中
- cd到xx文件夹中,git bash测试秘钥: ssh -T git@github.com
- 在GitHub网站手动创建仓库,用于与本地的仓库相连
4.2 关联远程仓库
- 关联远程库, 网页右侧获得gitHub地址
- git remote -v 打印远程库地址
- 在xx文件夹下执行 git remote add origin “远程地址”
- 取消关联远程仓库 git remote rm origin
4.3 拉取和推送内容###
- 拉取远程库内容到本地库 git pull origin master --allow-unrelated-histories
- 如不想覆盖本地: git pull --rebase origin master 来合并远程和本地仓库
- 推送本地库内容到远程库 git push origin master
- 选择不上传某些文件 touch .gitignore 在uu文件夹中创建一个文件 将不想提交的文件名写到 .gitignore文件中 但是如果想把.gitignore中的commit到本地仓库 则需加 -f
- 在master 下执行 git push origin master 提交到远程主分支
- 在week分支下执行 git push origin week 提交到远程week分支
4.4 克隆
- git clone '远程库地址' 只能克隆master分支, 在本地再创建week分支,
- 然后在week分支下执行 git pull origin week 把远程week分支的内容拉下来
- 在github上邀请成为成员, 可以执行push操作
- 当成员执行了push操作之后, 主管可以git fetch origin master 来抓取远程库, 无误再进行merge操作
- pull相当于 fetch 和 merge的合并
- 不太能产生冲突的时有pull,为了保险慎重使用fetch
4.5 解决与远程库冲突
- 如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取
- 拉取下来后如果进入冲突,则按照'分支冲突解决' 操作即可
5. 跨团队协作??? 未完待续.......
- fork,用团队外第三方的身份点fork
6.标签管理
* git tag 标签名 // 打标签
* git tag // 查看所有标签
* git tag 标签名 commitID // 给特定的commit id打标签
* git tag -a 标签名 -m “标签信息” // 指定标签信息
* git checkout v1.0 // 切换到指定标签的版本
* git show 标签名 // 查看说明文字
* git tag -d 标签名 // 删除标签
* git push origin 标签名 // 推送标签到远程
* git push origin --tags // 一次性推送全部尚未推送的标签到远程
* 删除已经推送到远程的标签: 先从本地删除 git tag -d 标签名
再从远程删除 git push origin :refs/tags/标签名