Git教程1.0
Posted 364.99°
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git教程1.0相关的知识,希望对你有一定的参考价值。
1.版本控制
- 简而言之,备份与记录
- 作用:
2.1 记录文件的所有历史变化
2.2 错误恢复到某个历史版本
2.3 多人协作开发编辑同一个文件
1.1 三类版本控制
-
本地版本控制系统
-
集中化的版本控制系统
典型代表——SVN
-
分布式版本控制系统
典型代表——GIT
2.Windows安装Git
2.1 下载安装
镜像下载Git网站:https://npm.taobao.org/mirrors/git-for-windows/
下载最新版本即可
安装很简单,不再赘述安装过程
- 安装好之后,鼠标右键可看到
GUI很少用,一般使用命令窗口Bash - 配置用户信息(必须配置)
git config --global user.name "自定义名字" #配置用户名字
git config --global user.emain "你使用的邮箱" #配置用户邮箱
git config --global --list #查看当前用户(global)配置
2.2 环境变量配置
配置环境变量:为了能全局使用,可以不配置
但使用idea,如果报错:idea file not found: git.exe 或 ‘git’ 不是内部或外部命令,也不是可运行的程序,时,就需要配置
3.Git文件的三种状态与工作模式
状态 | 描述 |
---|---|
已提交(committed) | 表示数据已经安全的保存在本地数据库 |
已修改(modified) | 表示修改了文件,但还没保存到数据库中 |
已暂存(staged) | 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中 |
本地工作区:
工作区域 | 描述 |
---|---|
工作区 | 简单的理解为在电脑里能看到的目录,比如自己创建的本地项目目录 |
暂存区 | Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git自动创建的第一个分支master,以及指向master的一个指针叫HEAD |
Git仓库 | 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库 |
4.本地版本库初始化与文件提交
4.1 完整工作区域
工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory),如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。
4.2 文件提交
- 随便找个文件夹,鼠标右键调出Git命令窗口
git init
创建一个.git文件夹- 查看设置,才能看到.git文件
- 新建一个.txt文件,并将它加载到暂存区
git status #查看当前文件夹文件状态
git add test.txt #将test.txt加载到缓存区
git add . #将所有文件加载到缓存区
- 提交文件到Git仓库
git commit test.txt -m "自己写描述" #提交文件到Git仓库
git ls-files #查看仓库的文件列表
5.版本切换
5.1 文件修改与比对
- 修改之前提交的文件,
git status
查看状态
- 重新上传到暂存区,
git add .
,查看状态
- 上传到本地仓库,
git commit -m "修改第一次后提交"
,查看状态
- 查看提交日志记录,
git log
- 与版本库内容进行比较,
git diff HEAD -- test.txt
查看暂存区的文件
差异比较说明:
---
:表示变动前的文件
+++
:表示变动后的文件
变动的位置用两个@作为起首和结束
@@ -1,2 +1,3 @@:- 表示第一个文件, 1 表示第1行,2 表示连续两行, + 表示变动后的文件,1 表示第一行, 3 表示连续三行。
注意:当没有任何输出的时候(即提交之后),表示此文件与版本库中的文件一样,未发生任何变动
5.2 文件版本切换
当提交记录过多的时候,使用git log
,略显臃肿,可用--pretty=oneline
简化输出:每次提交记录只显示一行
回退到上一版本:git reset --hard HEAD^
,上两个版本用^^
回到上n个版本:git reset --hard HEAD~100
,回到前多个版本
回到指定版本位置,git reset --hard 版本hash值(5~8个字符)
查看当前用户最近操作日志记录,git reflog
,可用于查找所有版本的hash值
5.3 文件删除
-
当文件(已提交到git库的文件)被误删之后,使用
git checkout
从版本库中检出
注意:可使用git status
追踪文件状态
如:我将已提交的test.txt文件误删后的恢复流程
-
当确认要删除某个文件后,使用
git rm 文件名
6.远程仓库github
下载方式:
- zip压缩包
- git:ssh、https
复制地址,选择一个本地目录打开Git Bash,git clone 地址
克隆到本地
注意:ssh比https编程效率高、也更安全。
国内登陆github需要一些加速器辅助才行
6.1 创建ssh公钥
- 本地生成ssh公钥和私钥,
ssh-keygen -t rsa -C "github账户邮箱"
一直回车就行
- 将公钥上传到github
- 验证是否配置成功,
ssh -T git@github.com
6.2 远程推送
- 创建一个远程仓库
- 本地上传文件
找到本地需要上传的文件的目录,右键Git Bash
刷新一下网页
推送成功
6.3 删除文件
由上图可知,之前在本地git仓库删除掉的test.txt仍然推送到了github,接下来演示如何删除它
- 先提交一次
- 再推送一次
总结:先在本地执行
git rm
删除操作,然后提交,再推送一次,就OK了
7.Git本地分支操作
多人合作的项目在开发时通常不会直接在主干master上进行操作,而是重新开辟新的分支,在新的分支上进行开发 调试 等操作,当项目调试通过时才会将分支项目的代码合并到主干中。
7.1 分支指令
Git对于分支操作提供了以下基本的命令:
命令 | 说明 |
---|---|
git checkout branch | 切换到指定分支 |
git checkout -b new_branch | 新建分支并切换到新建分支 |
git branch -d branch | 删除指定分支 |
git branch | 查看所有分支,并且*号标记当前所在分支 |
git merge branch | 合并分支 |
git branch -m | -M oldbranch newbranch | 重命名分支,如果newbranch名字分支已存在,则需要使用-M强制重命名,否则使用-m重命名 |
7.2 具体操作
分支的列表展示与切换
新建一个文本,并合并
分支命名
分支删除
注意:主干不能删
7.3 分支推送与拉取
- 相关指令
命令 | 说明 |
---|---|
git branch -a | 查看本地与远程分支 |
git push origin branch_name | 推送本地分支到远程 |
git push origin :remote_branch | 删除远程分支(本地分支保留) |
git checkout -b local_branch origin/remote_branch | 拉取远程指定分支并在本地创建分支 |
- 操作演示——本地分支推送到远程
分支推送成功:
- 操作演示——远程创建dev拉取到本地
因为github没有提供创建分支的按钮,所以先本地创建一个dev分支,推送到github之后并删除其本地分支git branch -D dev
,再演示远程拉取dev到本地。
将文件克隆到本地
7.3 本地分支冲突出现与解决
冲突演示
查看两个分支共同拥有的文件,并选取一个
查看分支中文件的内容cat test1_0.txt
,我这里是因为cat显示乱码,临时添加编码方式查看cat test1_0.txt | iconv -f GBK -t UTF-8
修改文件内容
修改之后提交
切换到main分支,并查看修改test1_0.txt的内容,
修改之后提交
合并dev,发生冲突
修改文件内容,删去===,<<,>>后提交
7.4 多人协同操作冲突
多人协同操作冲突比较常见
冲突演示
拉取远程仓库dev并在本地创建dev开发库,执 行命令git checkout -b dev origin/dev
,以同台电脑不同的窗口来模拟两个用户操作同一分支同一文件
-
克隆到桌面,并到克隆文件中打开控制git命令行拉取远端分支dev
-
另找一个目录,进行相同操作
-
修改文件内容
并提交
两个端口都做推送
可看出,后推送的报错,远程拒绝推送。
防范措施
在执行git push
操作之前,先执行git pull
操作,保持本地和远端内容一致,再添加新的内容,然后再提交。
8.标签管理
通常,发布一个版本时,会在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
标签操作基本命令
命令 | 说明 |
---|---|
git tag tag_name | 新建标签,默认为HEAD |
git tag -a tag_name -m ‘xxx’ | 添加标签并指定标签描述信息 |
git tag | 查看所有标签 |
git tag -d tag_name | 删除一个本地标签 |
git push origin tag_name | 推送本地标签到远程 |
git push origin --tags | 推送全部未推送过的本地标签到远程 |
git push origin :refs/tags/tag_name | 删除一个远程标签 |
9.知识点小结
以上是关于Git教程1.0的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程