Git的基本使用

git 体系介绍

git 和SVN 的区别

存储方式不一样

git把内容按元数据方式存在k/v数据库,而svn是按文件。

git hash-object -w README.MF
git cat-file -p commonitId

使用方式不一样

从本地把文件推送远程服务,svn只需要commint,而git 需要add,commint, push 三个步骤。

管理模式不一样

git是一个分布式版本管理系统,而svn是一个集中式管理系统

本地库的初始化

本地库初始化

打开git命令行界面,进入一个目录(该目录将成为一个本地库)后,执行 git init 命令即可完成。

创建后在该目录下的./git目录成为本地库。目录如下

设置签名

项目/仓库级别

需要设置 用户名 和 Email

git config user.name xxx

git config user.email xxx

系统级别

git config --global user.name xxx
git config --global user.emaiil xxx

信息保存位置 ~/.gitconfig 文件

级别优先级
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名

如果只有系统用户级别的签名,就以系统用户级别的签名为准

git 核心命令使用

基本命令

git status 查看状态

git add <文件或目录> 提交到暂存区

git rm --cached <文件或目录> 从暂存区删除

git commit <文件或目录> -m “注释” 提交到本地库

git commit -am “提交所有”

git remote [-v] 查看当前远程库

git remote add name xxx.com 添加远程库

git push --set-upstream name master 提交到远程库(设置了默认)

git push 远程仓库名 指定提交的远程仓库

git remote remove 远程仓库名 删除

git pull 拉取

git help 命令 查看帮助手册

日志命令

git log

多屏显示控制方式:git log | less
空格向下翻页
b 向上翻页
q 退出

git log --pretty=oneline

git log --oneline

git reflog

HEAD@{移动到当前版本需要多少步}

git log master…experiment 比较两个版本的区别

以图表的方式显示提交合并网络
git log --pretty=format:’%h %s’ --graph

查询比较两个版本
git log master…experiment

版本控制

本质是HEAD指针的移动

可以看到当前一共有四个版本,如果想回到哪个版本,使用

git reset --hard [局部索引值]

即可切换版本。

git reset --hard HEAD^
//一个^表示后退一步,n 个表示后退 n 步
git reset --hard HEAD~n
//表示后退 n 步

reset 命令3个参数的对比

–soft 参数

仅仅在本地库移动 HEAD 指针

使用–soft后,仅仅移动了本地库指针,这时候工作区代码没有发生变化,但是查看状态是会发现,显示了代码发生变化。

原因是相对于本地库,工作区和暂存区发生了前进。

–mixed 参数

在本地库移动 HEAD 指针 并 重置暂存区

使用 mixed后查看状态,会发现所有文件都变成红色,因为工作区对暂存区来说,发生了前进。

–hard 参数

在本地库移动 HEAD 指针
重置暂存区
重置工作区

文件删除后的恢复可以通过版本回溯来找回。

比较文件的差异

新建a.txt 然后commit。随后用diff命令显示如下

重新commit,之后再用diff,发现显示没有变化。说明diff是将文件和暂存区比较

//将工作区中的文件和本地库历史记录比较
git diff [本地库中历史版本] [文件名]

将其和上一个版本比较,显示了变化

分支管理

分支基本操作

#查看当前分支
git branch -avv
#基于当前分支新建分支
git branch <branch name>
# 基于提交新建分支
git branch <branch name> <commit id>
# 切换分支
git checkout <branch name>

分支合并

第一步:切换到接受修改的分支(被合并,增加新内容)上
git checkout [被合并分支名]

第二步:执行 merge 命令
git merge [有新内容分支名]

解决分支冲突

当master 和 branch2的版本是一致的时候,
在master分支修改(没有提交),然后切换到branch2分支,发现内容也修改了。

当mater分支虚构并提交后,切换到branch2分支,执行git merge master时不会发生冲突,而是重写。

由此可以得出分支冲突的情况

分支冲突的情况

当分支的版本都前进时,如果修改的为同一行将会产生冲突。

解决冲突

第一步:编辑文件,删除特殊符号

第二步:把文件修改到满意的程度,保存退出

第三步:git add [文件名]

git add 后,红色消失

第四步:git commit -m “日志信息”

提交后,完成解决冲突

注意:此时 commit 一定不能带具体文件名

远程库

推送到远程库

登录github官网创建远程库huashan

本地创建新的本地库huashan。

使用http地址,在push时需要填账号密码,可以通过ssh免密登录

git remote add huashan https://github.com/1366001909/huashan.git

git remote -v 查看当前远程库。 看到有两个地址,fetch用于拉取,push用于推送

git push 远程仓库 推送分支

git clone 地址

git clone 能达到

完整的把远程库下载到本地
创建 origin 远程地址别名
初始化本地库

拉去到本地库

git pull相当于抓取加合并,是git fetch和git merge的结合。

fetch 后新生成一个分支 origin/master,切换到改分支才能看到拉取的代码

再回到本地的分支,执行merge,完成合并。这种方法能够在先了解拉取的代码再做合并。

ssh 免密登录

win10系统的凭据让我们不需要每次都写帐号密码。

其他系统可以使用ssh免密登录。

进入当前用户的家目录
$ cd ~
 删除.ssh 目录
$ rm -rvf .ssh
 运行命令生成.ssh 密钥目录
$ ssh-keygen -t rsa -C atguigu2018ybuq@aliyun.com
[ 注意:这里-C  这个参数是大写的 C]
 进入.ssh 目录查看文件列表
$ cd .ssh
$ ls -lF
 查看 id_rsa.pub 文件内容
$ cat id_rsa.pub
 复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG
keys
 New SSH Key
 输入复制的密钥信息
 回到 Git bash 创建远程地址别名
git remote add origin_ssh git@github.com:atguigu2018ybuq/huashan.git
 推送文件进行测试

GIT工作流

概念

在项目开发过程中使用 Git 的方式

## 集中式工作流
像 SVN 一样,集中式工作流以中央仓库作为项目所有修改的单点实体。所有
修改都提交到 Master 这个分支上。
这种方式与 SVN 的主要区别就是开发人员有本地库。Git 很多特性并没有用到

GitFlow 工作流

Gitflow 工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布
迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构

分支总类

主干分支 master

主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境
完全一致。

开发分支 develop

主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
bug 修理分支 hotfix
主要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出,修
理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。

准生产分支(预发布分支) release

较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集
成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后
可以视情况删除。

功能分支 feature

为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支
中独立出来。 开发完成后会合并到开发分支。

Forking 工作流

Forking 工作流是在 GitFlow 基础上,充分利用了 Git 的 Fork 和 pull request 的
功能以达到代码审核的目的。更适合安全可靠地管理大团队的开发者,而且能接受
不信任贡献者的提交。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值