一、Git命令行操作
1.1本地库初始化
进入文件夹
git init
注意:生成的 .git 目录中存放的是本地库相关文件,不要删除
1.2设置签名
-
项目(仓库)级别
仅在当前本地库有效
git config user.name tom #设置用户名tom git config user.email fu@qq.com #设置用户邮箱
-
信息保存位置:
.git/config 文件
-
系统用户级别
仅在当前登录的操作系统用户有效
git config --global user.name tom git config --global user.email fu@qq.com
仅仅加了一个
--global
优先级别:
项目级别
>系统级别
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
如果只有系统用户级别的签名,就以系统用户级别的签名为准
二者都没有不允许的
- 信息保存位置:
~/.gitconfig
文件
1.3基本操作
1.3.1 状态查看
git status #查看工作区、暂存区状态
1.3.2 添加
git add fileName #指定文件
git add . #所有
说明:将工作区的文件添加到暂存区
1.3.3 提交
git commit -m 'commit message' fileName
说明:将暂存区内容提交到本地库
1.3.4 查看历史记录
git log
git reflog #常用
说明:HEAD@{移动到当前版本需要多少步}
git log --greph #图形显示,更直观
git log --pretty=oneline #漂亮一行显示
git log --oneline #简洁显示
多屏显示控制方式:
空格向下翻
b 向上翻
q 退出
1.3.5 前进后退
-
基于索引值(推荐)
git reset --hard 指针位置 例子:git reset --hard a6ace91 #回到这个状态
-
使用 ^ 符号
只能后退
git reset --hard HEAD^ 例子:git reset --hard HEAD^^ 注意:几个 ^ 表示后退几步
-
使用 ~ 符号
只能后退
git reset --hard HEAD~n 例子:git reset --hard HEAD~3 注: n 表示后退 n 步
1.3.6 reset的三个参数比较
soft:
- 仅本地库移动 HEAD 指针
mixed:
- 在本地库移动 HEAD 指针
- 重置暂存区
hard:
- 在本地库移动 HEAD 指针
- 重置暂存区
- 重置工作区
1.3.7 删除文件并找回
- 前提:删除前,文件存在的状态提交到了本地库
- 相当于建立一个快照,虽然删除了,但只要添加到暂存区,就能找回
git reset --hard [指针位置]
删除操作已经提交到本地库:指针位置指向历史记录
删除操作尚未提交到本地库:指针位置指向 HEAD
1.3.8 文件差异比较
git diff [文件名]
将工作区中的文件和暂存区进行比较
git diff 哈希值 文件名 #和历史中的一个版本比较
git diff [本地库中历史版本][文件名]
将工作区中的文件和本地库里历史记录比较
不带文件名,比较多个文件
2.2 分支管理
hot_fix` `master` `feature_x` `feature_y
2.2.1 什么是分支管理
- 在版本控制中,使用推进多个任务。
2.2.2 分支的好处
- 同时并行推进多个功能开发,提高开发效率。
- 各个分支在开发过程中,如果某一分支开发失败,不会对其它分支有任何影响。失败的分支重新开始即可。
2.2.3 分支操作
- 创建分支
git branch 分支名
- 查看分支
git branch
git branch -v # 查看所有分支
- 切换分支
git checkout 分支名
git checkout -b 分支名 #创建分支并直接切换到该分支
-
合并分支
相当于把修改了的文件拉过来
第一步:切换到接受修改的分支上(被合并,增加新内容)
git checkout [被合并的分支名]
第二步:执行 merge 命令
git merge [有新内容的分支名]
git merge xxx
注意:合并分支的时候要明确谁谁合并
我在a分支里面修改了。要合并到master,就先切换到master,然后合并b
- 删除分支
git branch -d 分支名
2.2.4 解决冲突
- 冲突的表现
- 冲突的解决
- 第一步:编辑,删除特殊标记
<<<
===
- 第二步:修改到满意位置,保存退出
- 第三步:添加到缓存区
git add [文件名]
- 第四步:提交到本地库
git commit -m "日志信息" ``注意:后面一定不能带文件名
- 第一步:编辑,删除特殊标记
二、Git保存版本的机制
1.1 集中式版本控制工具的文件管理机制
以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。
1.2 Git的文件管理机制
Git把数据看作是小型文件系统的一组快照。每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改, Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以Gt的工作方式可以称之为快照流。
1.3 Git 文件管理机制细节
- Git的“提交对象”
- 提交对象及其父对象形成的链条
三、Git分支管理机制
1.1 分支的创建
1.2 分支的切换
四、Git 结合Github
1.1 创建远程库地址别名
git remote -v #查看远程地址别名
git remote add 别名 远程地址
例子:git remote add origin https://xx
1.2 推送
开发修改完把本地库的文件推送到远程仓库
前提是提交到了本地库才可以推送
git push 别名 分支名
git push -u 别名 分支名 #-u指定默认主机
例子:git push origin master
1.3 克隆
完整的把远程库克隆到本地
克隆下来后不要在主分支里面做开发
clone进行一次,从无到有的过程,更新用pull
git clone [远程地址]
例子:git clone https://xx
clone之后的效果:
- 完整的把远程库克隆到本地
- 创建 origin 远程地址别名
- 初始化本地库
1.4 拉取
本地存在 clone 下来的文件 就用 pull 更新
pull = fetch(抓取) + merge(合并)
git fetch [远程库地址别名] [远程分支名]
git merge [远程库地址别名/远程分支名]
git pull [远程库地址别名] [远程分支名]
1.5 解决冲突
-
要点:如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取pull。
-
拉取下来后如果进入冲突状态,则按照 "分支冲突解决" 操作。
-
注意:解决冲突后的提交是不能带文件名的
1.6 rebase
提交记录简洁不分叉
没学懂,感觉有点鸡肋
混眼熟
git rebase -i 索引号
git rebase -i HEAD~3 #合并最近三条记录
说明:在vim编辑里面改成s
1.7 beyond compare
用软件解决冲突
1.安装 :
beyond compare
2.配置:
git config --local merge.tool bc3 #合并名称
git config --local mergetool.path '/usr/local/bin/bcomp' #软件路径
git config --local mergetool.keepBackup false #False不用保存备份
3.应用:
git mergetool
说明:--local指只在当前操作系统有效
1.8 跨团队合作
-
Fork
-
本地克隆clone修改,然后推送到远程库push
-
Pull Request 请求
-
Create pull request 发消息
-
两个人可以进行对话
-
代码审核review
-
合并代码
-
填写本次操作的日志信息
-
将远程库修改拉取到本地(结束)
- 适用于个人
邀请成员:Settings
--> Collaborators
-->填写用户名
-->打开链接接受邀请
-
企业
创建一个组织
方便管理
-
review
组织做review
通过Pull request
-
给开源社区共享代码
点击别人仓库的 fork 到自己的仓库
-- >然后 clone 下来 修改后推送到远程库
-->点击Pull Request请求
-->Create pull request发消息
1.9 Tag标签
为了清晰的版本管理,公司一般不会直接使用 commit 提交
git tag -a v1.0 -m '版本介绍' #创建本地 tag 信息
git tag -d v1.0 #删除 tag
git push origin --tags #将本地 tag 信息推送到远程库
git pull origin --tags #拉取到本地
git checkout v.10 #切换 tag
git clone -b v0.1 地址 #指定 tag下载代码
1.10 SSH 免密登录
- 输入:
ssh-keygen -t rsa -C GitHub邮箱地址
- 进入
.ssh
目录,复制id_rsa.pub
文件内容 - 登录GitHub。
Settings
-->SSH and GPG keys
-->New SSH Key
- 回到git通过ssh地址创建。
git remote add 别名 SSH地址
五、Git工作流
1.1 概念
- 在项目开发过程中使用Git的方式
1.2 分类
1.2.1 集中式工作流
-
像SVN一样,集中式工作流有一个中央仓库,所有的修改都提交到了Master分支上
-
这种方式与SVN的只要区别就是开发人员有本地库。Git很多特性并没有用到。
1.2.2 GitFlow工作流 (重要)
-
主干分支
master
开发分支develop
修复分支hotfix
预发布分支release
功能分支feature
-
GitFlow 有独立的分支,让发布迭代过程更流畅。
1.2.3 Forking 工作流
-
在 GitFlow 基础上, 充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。
-
安全可靠地管理大团队的开发者
网友评论