文章目录
一、概述
1.1 什么是Git
Git是一个免费、开源的版本控制软件
1.2 什么是版本控制系统
版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。(记录文件的所有历史变化、随时可恢复到任何一个历史状态、多人协作开发或修改错误恢复)
1.3 什么是Github
Github是全球最大的社交编程及代码托管网站(https://github.com/)。
Github可以托管各种git库,并提供一个web界面(用户名.github.io/仓库名)
1.4 Github和Git是什么关系
Git是版本控制软件
Github是项目代码托管的平台,借助git来管理项目代码
1.5 四个工作区域
Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:
-
Workspace: 工作区,就是你平时存放项目代码的地方
-
Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
-
Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
-
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换(github、gitlab、gitee等)
1.6 工作流程
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
1.7 文件的四种状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
GIT不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。
-
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
二、Git 常用命令
1.linux安装
yum install git -y
2.windows 安装
https://git-scm.com/download/win
3.创建项目,先创建文件,然后在文件下初始化 git init
可以看到出现.git文件
4.配置个人信息
[root@gitlab project_demo]# git config user.name 'bertwu'
[root@gitlab project_demo]# git config user.email 'bertwu@163.com'
可以看到已经写入配置文件中
默认不配置的话,会使用全局配置里面的用户名和邮箱 全局git配置文件路径:~/.gitconfig
5.修改bash窗口提示颜色,执行如下命令
git config --global color.status auto
git config --global color.diff auto
git config --global color.branch auto
git config --global color.interactive auto
6.创建新文件,然后查看状态 git status
红色表示新建文件或者新修改的文件,都在工作区.
绿色表示文件在暂存区
新建的login.py文件在工作区,需要添加到暂存区并提交到仓库区
[root@gitlab project_demo]# touch login.py
7.将工作区的文件添加到暂存区
# 添加项目中所有文件
git add .
或者
# 添加指定文件
git add login.py
8.将暂存区文件提交到本地仓库 git commit -m '描述'
commit会生成一条版本记录, -m后面是版本描述信息
9.编辑login.py文件
代码编辑完成后即可进行add和commit操作
提示:添加和提交合并命令 git commit -am "版本描述"
提交两次代码,会有两个版本记录
[root@gitlab project_demo]# echo "age=10" > login.py
[root@gitlab project_demo]# git commit -am '第一个变量'
[master 38af1aa] 第一个变量
1 file changed, 1 insertion(+)
[root@gitlab project_demo]# echo "age=20" >> login.py
[root@gitlab project_demo]# git commit -am '第二个变量'
[master 9352c8d] 第二个变量
1 file changed, 1 insertion(+)
[root@gitlab project_demo]#
10.查看历史版本
git log
或者 git reflog
git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log 则不能察看已经删除了的commit记录
11.回滚版本
方案一:
HEAD表示当前最新版本
HEAD^表示当前最新版本的前一个版本
HEAD^^表示当前最新版本的前两个版本,以此类推…
HEAD~1表示当前最新版本的前一个版本
HEAD~10表示当前最新版本的前10个版本,以此类推…
git reset --hard HEAD^
[root@gitlab project_demo]# cat login.py
age=10
方案二:当版本非常多时可选择的方案
通过每个版本的版本号回退到指定版本
git reset --hard 版本号
12.撤销修改
只能撤销工作区、暂存区的代码,不能撤销仓库区的代码
撤销仓库区的代码就相当于回退版本操作
1.撤销工作区代码
新加代码 age=30,不add到暂存区,保留在工作区
git checkout 文件名
[root@gitlab project_demo]# echo "age=30" >> login.py
[root@gitlab project_demo]# cat login.py
age=10
age=20
age=30
[root@gitlab project_demo]# git checkout login.py #撤销操作
[root@gitlab project_demo]#
[root@gitlab project_demo]#
[root@gitlab project_demo]# cat login.py
age=10
age=20
2.撤销暂存区代码
新加代码age=30,并add到暂存区
第一步:将暂存区代码撤销到工作区
git reset HEAD 文件名
第二步:撤销工作区代码
git checkout 文件名
13.版本对比
- 对比版本库与工作区
新加代码age=30,不add到暂存区,保留在工作区
git diff HEAD -- 文件名
- 对比版本库
git diff HEAD HEAD^ -- login.py
14.删除文件:
删除文件分为确定删除和误删
在项目中新建test.py文件,并添加和提交到仓库
确定删除处理:
# 删除文件
rm 文件名
# git确定删除文件,对比添加文件git add
git rm 文件名
# 删除后记录删除操作版本
git commit -m '删除描述'
- 误删处理:撤销修改即可
# 删除文件
rm 文件名
# git撤销修改
git checkout -- 文件名
三、分支
作用:
- 区分生产环境代码以及开发环境代码
- 研究新的功能或者攻关难题
- 方便为新开发人员开辟环境
- 解决线上bug
特点:
项目开发中公用分支包括master、dev
分支master是默认分支,用于发布,当需要发布时将dev分支合并到master分支
分支dev是用于开发的分支,开发完阶段性的代码后,需要合并到master分支
查看当前分支
git branch
创建并切换分支
git checkout -b dev
创建分支
git branch 分支名称
将dev分支合并到master,需要先切换到master
git checkout master
git merge dev
删除分支
git branch -d 分支名称
四、远程仓库创建项目
添加远程仓库并起别名origin
git remote add origin 远程仓库地址
[root@gitlab project_demo]# git branch
dev
dev1
* master
# 按照提示添加远程仓库
[root@gitlab project_demo]# git remote add origin git@gitee.com:bertwu_git/shopping.git
# 查看远程仓库
[root@gitlab project_demo]# git remote -v
origin git@gitee.com:bertwu_git/shopping.git (fetch)
origin git@gitee.com:bertwu_git/shopping.git (push)
将本机的公钥添加到gitee,因为走的ssh协议,需要免密
向远程仓库推送代码
git push -u origin 分支名称
[root@gitlab project_demo]# git push -u origin master
git clone 新项目第一次必须要克隆项目;
git push origin master
git pull origin master等价于
git fetch origin
git merge origin/dev
Tag标签
git标签就是对commit的一次快照,便于后续将特定时期的代码快速取出。在代码发布时可以使用标签发布。
对当前最新提交的代码创建标签,-a标签名称,-m标签描述
# 创建标签
[root@gitlab project_demo]# git tag -a "V2.0" -m '里程碑时代'
# 提交标签
[root@gitlab project_demo]# git push --tag
也可以指定commitID 打标签
git tag -a v2.2 CommitID -m "Messages"
查看标签
[root@gitlab project_demo]# git tag
V2.0
免密登录实现
- URL方式
原始地址:
https://gitee.com/bertwu_git/shopping.git
修改为:
https://用户名:密码@bertwu_git/shopping.git
添加仓库
git remote add origin https://用户名:密码@bertwu_git/shopping.git
git push origin master
- ssh 生成公钥,将公钥配置在远程仓库中。
git忽略文件
让 Git 不再管理当前目录下的某些文件。在项目中创建 .gitignore文件
通常情况下有如下文件可能需要忽略
1.程序运行时产生的垃圾文件
2.程序运行时产生的缓存文件
3.程序本地开发使用的图片文件
4.程序连接数据一类的配置文件
*.h
!a.h
files/
*.py[c|a|d]