Git入门教程

 01 Git的介绍与安装

Git 简介

  • Git是目前世界上最先进的分布式版本控制系统(没有之一)。
  • Git有什么特点?简单来说就是:高端大气上档次!
  • 官网注册账号: https://github.com/
  • Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
  • Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

 

Git 与 SVN 区别

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。

Git 与 SVN 区别点:

  • 1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
  • 2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
  • 3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
  • 4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
  • 5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

最大的 区别就是svn是局域托管。

 

Git 安装配置

在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。

Git 各平台安装包下载地址为:http://git-scm.com/downloads

下载完双击安装

使用git:点击进入 Git Bash

 

仿linux黑屏终端

配置用户名 git config --global user.name "你自己GitHub的用户名"

配置邮箱 git config --global user.email "自己的GitHub的注册邮箱"

02版本库

什么是版本库?

又名仓库,可以理解为一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除、Git都能跟踪,以便任何时刻都有一个追踪历史,或者在将来某个时刻可以还原。

 

创建版本库

1、在合适的地方,创建一个空目录(随便在电脑上创建一个)

2、cd 进入

 

3、使用git init 命令把这个目录变成Git可以管理的仓库

4、创建成功

 

注意:千万不要手动修改.git目录的配置文件(默认为隐藏文件),看下图

把文件添加到版本库

可以把 sunck 文件夹看成是一个仓库,但真正的仓库是 sunck 文件夹下的 .git 目录

  1. 在仓库目录中创建一个sunck.txt 文件 添加 sunck is a good man 为内容
  2. 把文件添加到仓库 git add sunck.txt
  3. 把文件提交到仓库 git commit -m "注释信息"
  4. 放入成功

时光穿梭机

git status 命令可以让我们时刻掌握仓库当前的状态

修改sunck.txt文件内容为 sunck is a nice man

git status 命令再次查看

gid diff 命令可以查看修改的内容

git log 该命令可以显示从最近到最远的提交日志

修改 sunck.txt 文件内容为 sunck is a handsome man 提交

git log 命令再次查看

也可以使用 git log --pretty=oneline 按行查看

版本回退

git reset --hard HEAD^            回退到上一个版本

git reset --hard HEAD^^          回退到上上版本

git reset --hard HEAD~100     回退到上100个版本

git reset --hard 具体版本号     回退到具体版本

 

查看内容,命令:cat sunck.txt

回退到具体版本,版本号在回退的时候不用写具体版本号,可以只写前4、5、6位

HEAD 相当于一个指针、指向哪里使用哪里

git reflog 该命令记录每一次命令

03工作区和版本库

工作区和版本库

 

工作区

工作区真正意义存在于./git目录下的add工作区,但是我们可以泛指是写代码并add(添加)的地方叫做工作区(也叫仓库所在的目录)

版本库

定义:.git目录是Git的版本库,分为:

  • 暂存区(state)
  • 自动创建的一个分支(master)
  • 指向master的指针(HEAD)

 

git checkout -- fileName (速度更快些):撤销的意思

 

第一:工作区域缓存区代码不一致,没有 add 和 commit

 

执行 git checkout -- fileName

 

如果 fileName 文件自修改后还没有被放到暂存区,现在,撤销修改就会回到和版本库一模一样的状态。

第二:再次修改工作区的代码添加到缓存区:

 

暂存区的代码:sunck is a very handsome man

 

再一次修改工作区的代码:

 

以上情况是工作区、暂存区、版本库三个地方的代码都不一致

 

如果 fileName 文件已经添加到暂存区, 又做了修改,现在,撤销修改就回到添加到暂存区后的状态

总之,就是让这个 fileName 文件回到最后一次 git commit 或者 git add 时的状态

 

04创建与关联远程仓库

创建SSH Key

黑屏终端输入 ssh-keygen -t rsa -C '自己GitHub的注册邮箱'

.ssh: id_rsa:私钥 id_rsa.pub:公钥

复制公钥,公钥末尾的邮箱添不添加无所谓

 

登陆 github 官网

 

选择 ssh and gpg keys

 

创建key

 

自定义名称,添加公钥:第一次配置钥匙需要输入密码

 

 

测试秘钥是否通过

命令:ssh -T git@github.com

 

创建远程仓库

 

public是公有的可以访问下载,private(收费)是不可下载

Initialize this repository with a README 是指 初始化

add.gitignore 指的是可能提交代码有一部分是不用提交的比如第三方库。

 

关联远程仓库

远程仓库地址获取方法:

 

git remote add origin 远程仓库地址 进行关联,PC与远程仓库关联

 

删除关联:git remote rm origin

 

 

注意:

1.推送本地库内容到远程库:git push origin master,注意需要先把远程库内容拉倒本地,否则会报错;

2.忽略特殊文件 .gitignore #该文件可以将不想上传到远程库的文件名写进去就可以实现

3.拉取远程库内容到本地库:git pull origin master

 

出现错误与解决办法:

这种报错是因为本地和远程的库版本不同

 

在执行命令 git pull origin master --allow-unrelated-histories 会进入 vim

 

直接英文 :q 就可以退出 vim ,退出后显示成功:

 

同时会在你所创建的 sunck 文件夹内出现 README.md:

 

推送本地库内容到远程库:git push origin master

 

进入 github 查看:

 

从零开发:正常开发我们本地是没有库的,so,先把本地库删除掉

 

  1. 先有远程库
  2. 从远程库克隆 git clone 远程库地址

git clone git@github.com:lianxi19930822/sunck.git

 

已克隆到本地,本地仓库位置会发生变化(无所谓)

 

进入本地库并查看

 

修改或添加代码

 

推送到远程库:

1. git add 文件名

2. git commit -m "注释信息"

3. git push origin master

 

进入GitHub 查看:

 

查看添加或修改代码是否成功:

 

特殊文件:.gitignore

1.必须是 .gitignore 这个文件名,不可更改

2..gitignore 文件里所标识的文件或目录是不会推送到 GitHub 远程库,一般大文件是不会往 Git 上推送的

 

也可以在仓库目录下进行手动创建

 

例子:将 bao 这个文件名添加到 .gitignore 文件里面

 

推送至远程库:

 

查看远程库:

查看 .gitignore 文件

 

05分支管理

 

作用

  • 假设你准备开发一个新的功能,但是需要两周才能完成,第一周写了50%,如果立即提交,由于代码还没有写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又会存在丢失每天进度的巨大风险。
  • 有了分支,可以避免上述问题。创建一个属于自己的分支,别人看不到,还继续在原来的分支上正常工作,而我们在自己的分支上干活,想提交就提交,知道开发完毕后,在一次性合并到原来这个问题我的的分支上,这样,既安全,又不影响别人工作。

特点

Git的分支是与众不同的,无论创建、切换和删除分支,Git在非常短的时间内就能完成!无论版本库是一个文件还是一万个文件。

 

master主分支

  • 在版本回退中,每次提交,Git都把它们串成一条时间线,在Git里,这个分支叫主分支,即master分支,HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以HEAD指向的就是当前分支。

 

 

  • 每次提交,master分支都会向前移动一步,这样,随着不断提交,master分支的线越来越长。

创建分支

创建分支 git branch 分支名

 

查看当前分支 git branch 会列出所有分支;当前分支前会有一个 * 号

 

切换分支 git checkout 分支名

 

创建与切换同时进行 git checkout -b 分支名

 

在 wrp 分支下添加代码

 

添加并提交 wrp 分支下代码

 

在切换到 sck 分支下

 

查看 sck 分支下代码

 

切换到 master 主轴下

 

查看 master 主轴下代码

 

再次切换到 wrp 分支下

 

并查看 wrp 分支下代码

 

注:每一个分支都可以提交,保证自己的数据不丢失,并不影响其他分支,各司其职

添加或修改 wrp 分支下代码

 

并提交到版本库:

 

 

合并分支:想往谁的身上合就要走到谁的身上

把 wrp 分支的工作成果合并到 master 主轴上

图解:

 

合并命令:git merge 分支名

 

合并成功后查看代码:

 

将合并成功后的代码推送至远程库:

 

查看远程库:

 

 

以上讲解只是在演示知识点:创建、合并、推送,若我们自己真正在开发的时候不能和上面讲解一样,一直在主分支(master)上操作,我们在远程库上要有自己的分支,正常开发的代码应当提交到自己的分支上,只有在开发完成后,才能将自己分支上的内容合并到主分支上。

删除分支 git branch -d 分支名

删除远程分支 git push origin :分支名 git push origin --delete 分支名

将远程库上的内容拿下来后,在自己的分支上开发:

 

附上图:命令 git commit 会直接进入 vim,注释可在 vim 里编写,但不建议使用

在远程库上创建自己的分支,有两种方法:

第一种:在远程库上直接创建

 

第二种:

建立本地分支和远程分支的关联,使用命令 git push --set-upstream origin 分支名 该命令往远程库推送数据的同时也会在远程库上创建一个分支(要在自己的分支下推送,有更新就提交上去)

 

在 GitHub 上查看创建好的分支:

 

在 GitHub 上查看代码:

 

再次添加或修改代码

 

推送至远程库

 

查看推送至远程库 wrp 分支下的代码

 

删除本地库并关闭黑屏终端

 

克隆远程库到本地

 

注:每次从远程仓库克隆的时候只能克隆只有master主分支的库,但是你可以从本地库建立一个分支,再使用 git pull origin 分支名 拉取其分支内的文件,真正在使用的时候,在写完的时候可以提交到本地的主分支上,再从主分支上传到远程库。

重新创建本地分支并拉取远程库数据

假设现在 wrp 分支代码已完成要与主分支合并

将 wrp 分支已完成代码提交到版本库,并没有推送到远程库

切换到主分支

查看主分支代码

wrp 分支与主分支合并

将合并数据推送至远程库主分支上

查看远程库

现在另一个人 XXX 在工作时要写代码,但TA没有版本库,就必须把远程库克隆到本地

克隆成功并进入本地库目录下

XXX 现在没有分支,那就创建分支

使用命令:git push --set-upstream origin 分支名 将分支推送到远程仓库,第一次推送分支需要使用此命令

查看远程库

添加或修改 XXX 分支下代码

推送到远程仓库XXX分支下

查看远程仓库XXX分支,推送成功

当再次需要开发代码时,从远程仓库克隆到本地,重新在本地创建XXX分支,并拉取远程仓库XXX分支,然后更新代码提交到版本库与主分支合并,推送至远程仓库。

在自己的分支上干活,完成后可往主分支上合并,你可以往主分支上合并,也可以把主分支往你的分支上合并。

忠告:一般在公司工作中不要随便把自己的代码往主分支上合并,容易把远程仓库搞乱,除非领导说让你合并,如果擅自合并有可能被开。

 

分支合并时冲突

如果主分支上的代码比你自己分支上的代码多,你可能从远程仓库拉取到本地不成功

重新推送

查看远程库:

与主分支合并,

现在wrp分支与主分支代码一致

更新wrp分支下的代码

更新主分支下的代码

主分支与wrp分支的代码都更新过并且都提交到版本库了,现在到底听谁的,合并之后到底显示谁的内容

不想要哪个分支的代码就删除谁的

将修改好的代码提交到版本库

git log --graph 查看分支合并图,会形成树状的一种结构

 

分支策略

  • master分支应该是非常稳定的,依旧是仅用来发布新版本,平时不能在上面干活
  • 干活都在dev分支上,也就是dev分支是不稳定的,到某个时候,比如1.0版本时,再把dev分支合并到master上,在master分支上发布1.0版本(可以将dev理解为副master)
  • 你和你的小伙伴每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支合并就行

推送分支

  • git push origin master
  • git push origin dev

抓取分支

  • 从远程库clone时,默认只能看到master
  • 想在dev分支上开发,就必须创建origin的分支到本地
  • git checkout -b dev origin/dev

工作模式

  1. 可以试图使用git push origin branch-name 推送自己的修改
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull 试图合并
  3. 如果合并有冲突,则解决冲突,并在本地提交
  4. 如果有冲突或者解决冲突后,再用git push origin branch-name 推送就能成功
  5. 如果git pull 提示“no tracking information ” ,则说明本地库分支和远程库分支链接未创建,用命令:git branch --set-upstream branch-name origin branch-name

06标签管理

意义

发布一个版本时,我们通常现在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本的一个快照。

 

打标签:git tag 标签名

 

更新代码

 

提交到版本库并且打上标签

 

查看所有标签: git tag

 

切换到指定标签: git checkout 标签名

 

指定commitID打标签,每一次提交到版本库打标签:git tag 标签名 commitID

 

查看说明文字:git show

 

git show 标签名

 

推送本地标签到远程库:git push origin 标签名 能推送就能拉取

 

查看推送到远程库标签

 

查看版本内容

 

以上是简单说明一下常用的标签命令

标签的使用:总的来说:上线的时候都会打标签

 

git tag 标签名 打标签

git tag 查看所有标签

git tag 标签名 commitID 指定commd id 打标签

git tag -a 标签名 -m '标签信息' 指定标签信息

git checkout 标签名 切换到指定标签

git show 标签名 查看说明文字(含有添加的内容)

git tag -d 标签名 删除标签

git push origin 标签名 推送标签到远程

git push origin --tags 一次性推送全部尚未推送到远程的本地标签

删除已经推送到远程的标签

  • 先从本地删除 git tag -d 标签名
  • 再从远程删除 git push origin :refs/tags/标签名

07删库

 

壹:

 

贰:

 

叁:

 

肆:

 

调整黑屏终端字体

壹:

贰:

叁:

Git 常用命令大全

转载需声明出处:

https://blog.csdn.net/halaoda/article/details/78661334?tdsourcetag=s_pctim_aiomsg

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值