Git操作——简单可直接食用
Git命令行操作
1.1本地库初始化
进入文件夹
1 | git init |
1.2设置签名
项目(仓库)级别
仅在当前本地库有效
1
2git config user.name tom #设置用户名tom
git config user.email liu@qq.com #设置用户邮箱系统用户级别
仅在当前登录的操作系统用户有效
1
2git config --global user.name tom
git config --global user.email liu@qq.com
仅仅加了一个
--global
优先级别:
项目级别
>系统级别
信息保存位置:
~/.gitconfig 文件
1.3基本操作
1.3.1 状态查看
1 | git status #查看工作区、暂存区状态 |
1.3.2 添加
1 | git add fileName #指定文件 |
1.3.3 提交
1 | git commit -m 'commit message' fileName |
1.3.4 查看历史记录
1 | git log |
1.3.5 前进后退
1.3.6 reset的三个参数比较
1 | soft: |
git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本.
为了更好地理解git reset,我们来回顾一下,Git的版本管理及HEAD的理解
Git的所有提交,会连成一条时间轴线,这就是分支。如果当前分支是master,HEAD指针一般指向当前分支,如下:
假设执行git reset,回退到版本二之后,版本三不见了哦,如下:
1.3.7 删除文件并找回
- 相当于建立一个快照,虽然删除了,但只要添加到暂存区,就能找回
1 | git reset --hard 指针位置 |
1.3.8 文件差异比较
1 | git diff 文件名 |
1.3.9 git stash
stash命令可用于临时保存和恢复修改
1 | git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作 |
2.2 分支管理
hot_fix
master
feature_x
feature_y
2.2.1 什么是分支管理
- 在版本控制中,使用推进多个任务
2.2.2 分支的好处
- 同时并行推进多个功能开发,提高开发效率
- 某一分支开发失败,不会对其它分支有任何影响
2.2.3 分支操作
- 创建分支
1 | git branch 分支名 |
- 查看分支
1 | git branch |
- 切换分支
1 | git checkout 分支名 |
- 合并分支
相当于把修改了的文件拉过来
1 | git merge xxx |
- 删除分支
1 | git branch -d 分支名 |
2.2.4 解决冲突
- 冲突的表现
- 冲突的解决
- 第一步:编辑,删除特殊标记
<<<
===
- 第二步:修改到满意位置,保存退出
- 第三步:添加到缓存区
git add 文件名
- 第四步:提交到本地库
git commit -m '日志信息'
注意:后面一定不能带文件名
- 第一步:编辑,删除特殊标记
Git 结合Github
创建一个新的存储库
git init
git add .
git commit -m “first commit”
git branch -M master
git remote add origin https://github.com/wuz/XiaMi-Shop.git
git push -u origin master
已经有仓库
git remote add origin https://github.com/wuz/XiaMi-Shop.git
git branch -M master
git push -u origin master
别分手
别名 分支名
1.1 创建远程库地址别名
1 | git remote -v #查看远程地址别名 |
1.2 推送
开发修改完把本地库的文件推送到远程仓库
前提是提交到了本地库才可以推送
1 | git push 别名 分支名 |
1.3 克隆
完整的把远程库克隆到本地
克隆下来后不要在主分支里面做开发
clone进行一次,从无到有的过程,更新用pull
1 | git clone 远程地址 |
1.4 拉取
本地存在clone下来的文件 就用pull更新
注意: 如果你提交成功下班后:同事也向该远程仓库提交了新的内容。第二天上班时,你需要拉去线上的仓库的最新版本。
1 | pull = fetch + merge |
因此在每天工作的第一件事就是git pull 拉取线上的最新版本,下班要做的就是 git push,将本地代码提交到线上仓库。
1.5 解决冲突
注意:解决冲突后的提交是不能带文件名的
如果不是基于远程库最新版做的修改不能推送,必须先pull下来安装冲突办法解决
1.6 rebase
rebase又称为衍合,是合并的另外一种选择。
假设有两个分支master和test
1 | D---E test / A---B---C---F--- master 复制代码 |
执行 git merge test得到的结果
1 | D--------E / \ A---B---C---F----G--- test, master 复制代码 |
执行git rebase test,得到的结果
1 | A---B---D---E---C‘---F‘--- test, master 复制代码 |
rebase好处是: 获得更优雅的提交树,可以线性的看到每一次提交,并且没有增加提交节点。所以很多时候,看到有些伙伴都是这个命令拉代码:git pull –rebase
1.7 beyond compare
用软件解决冲突
1 | 1.安装 : |
1.8 跨团队合作
代码review之后合并
适用于个人
邀请成员:
Settings
–>Collaborators
–>填写用户名
–>打开链接接受邀请
企业
创建一个组织
方便管理
review
组织做review
通过Pull request
给开源社区共享代码
点击别人仓库的fork 到自己的仓库
– >然后clone下来 修改后推送到远程库
–>点击Pull Request请求
–>Create pull request发消息
1.9 Tag标签
为了清晰的版本管理,公司一般不会直接使用commit提交
1 | git tag -a v1.0 -m '版本介绍' #创建本地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 概念
1 | 在项目开发过程中使用Git的方式 |
1.2 分类
1.2.1 集中式工作流
1 | 像SVN一样,集中式工作流有一个中央仓库,所有的修改都提交到了Master分支上 |
1.2.2 GitFlow工作流 *
主干分支master
开发分支develop
修复分支hotfix
预发布分支release
功能分支feature
1 | GitFlow 有独立的分支,让发布迭代过程更流畅。 |
1.2.3 Forking 工作流
1 | 在 GitFlow 基础上, 充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。 |
Git基本理论(重要)
1.1 三个区域
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
- Workspace:工作区,就是你平时存放项目代码的地方
- Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
- Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
本地的三个区域确切的说应该是git仓库中HEAD指向的版本:
- Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
- WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
- .git:存放Git管理信息的目录,初始化仓库的时候自动创建。
- Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
- Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
- Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。
1.2 工作流程
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
1.3 文件的四种状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
- Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
总结(详细)
1.1 新建代码库
1 | # 在当前目录新建一个Git代码库 |
1.2 配置
Git的设置文件为.gitconfig
,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)
1 | # 显示当前的Git配置 |
1.3 增加/删除文件
1 | # 添加指定文件到暂存区 |
1.4 代码提交
1 | # 提交暂存区到仓库区 |
1.5分支
1 | # 列出所有本地分支 |
1.6 标签
1 | # 列出所有tag |
1.7 远程同步
1 | # 下载远程仓库的所有变动 |
1.8 撤销
1 | # 恢复暂存区的指定文件到工作区 |
参考链接:
https://mp.weixin.qq.com/s/Bf7uVhGiu47uOELjmC5uXQ
http://www.cpengx.cn/p/554.html
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
愿你的坚持总有收获
Use this card to join the candyhome and participate in a pleasant discussion together .
Welcome to aqing's candyhome,wish you a nice day .