版本:软件版本,文件版本,保存重要的历史记录,恢复数据
版本控制软件的基础功能:保存和管理文件,提供客户端工具访问,提供不同版本文件比对功能
一、git基础概念
1.git的三个区域
工作区,暂存区,git仓库
2.git的三种状态
已修改,已暂存,已提交
modified已修改了文件,但还没将修改的结果放到暂存区
staged已暂存,表示对已修改的文件当前版本做了标记,使之包含在下次提交的列表中
committed已提交,表示文件已经安全地保存在本地的git仓库中
3.git的工作流程
a.在工作区中修改文件
b.将想要下次提交的更改进行暂存
c.提交更新,找到暂存区的文件,将快照永久性存储到git仓库
二、安装并配置git
1.下载安装
2.配置用户信息
git config --global user.name 'xxxxxxx'
git config --global user.email 'xxxxxxx.xxx'
3.检查配置信息
git config --list --global 查看所有的全局配置项
git config user.name
git config user.email
4.获取帮助信息
git help <verb>命令可在浏览器中打开帮助手册
git help config打开帮助手册
git config -h获取命令的快速参考
三、获取git仓库的两种方式
1.将尚未进行版本控制的本地目录转换为git仓库
2.从其他服务器克隆一个已存在的git仓库
四、在现有目录中初始化仓库
1在项目目录中,通过鼠标右键打开**"Git Bash Here"**
2.执行git init命令将当前的目录转化为git仓库
git init 命令会创建一个名为.git的 隐藏目录,这个.git目录就是当前项目的git仓库,里面包含了初始的必要文件,这些文件是git仓库的必要组成部分。
3.检查文件状态git status
git status命令查看文件处于什么状态,在状态报告中可以看到新建的文件出现在Untracked files(未跟踪的文件)下面,未跟踪文件意味着git在之前的快照中没有这些文件,git不会自动将之纳入跟踪范围,除非明确表示需要git跟踪管理该文件。
以精简方式显示文件的状态,未跟踪文件前面有红色的??标记
git status -s
git status --short
4.跟踪新文件git add
使用git add开始跟踪一个文件。
要跟踪index.html输入命令git add index.html即可。此时再运行git status命令,index.html文件已被跟踪,并处于暂存状态
5. 提交更新git commit
现在暂存区中有一个index.html文件等待被提交到git仓库中进行保存。可以执行git commit命令进行提交,其中-m选项后面是本次的提交消息,用来对提交内容做进一步表述。
提交成功后,再次检查文件的状态。
6.对已提交的文件进行修改
目前,index.html文件已经被git跟踪,并且工作区和git仓库中的index.html文件内容保持一致。当我们修改index.html文件内容之后,再次运行git status -s命令
修改过的,没有放入暂存区的文件前面有红色的M标记。
7.暂存已修改的文件git add
git add命令有3 个功能
a.跟踪新文件
b.把已跟踪的,且已修改的文件放到暂存区
c.把有冲突的文件标记为已解决状态
8.提交已暂存的文件git commit -m "提交消息"
再次运行git commit -m "提交消息"命令,即可将暂存区中的index.html的快照提交到git仓库中进行再次保存。
9.撤销对文件的修改
把工作区中对应文件的修改,还原成git仓库中所保存的版本。
操作的结果:所有的修改会丢失,且无法恢复,慎重操作
git checkout -- index.html
10.向暂存区中一次性添加多个文件git add .
git add .
将新增和修改后的文件加入暂存区
11.取消暂存的文件
git reset HEAD 要移出的文件名称
12. 跳过使用暂存区域git commit -a -m '"描述消息"
git标准的工作流程是工作区→暂存区→ git仓库,但有时这么做略显繁琐,此时可以跳过暂存区,直接将工作区中的修改提交到git仓库,这时候git仓库工作流程简化为了工作区→ git仓库。
在提交的时候,给git commit 加上 -a,git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤。
git commit -a -m '"描述消息"
13.移除文件git rm -f index.html
a.从git仓库和工作区中同时移出对应的文件
git rm -f index.html
b.只从git仓库中移出指定的文件,但保留工作区中对应的文件
git rm --cached index.html
14.忽略文件
文件.gitignore的格式规范
a.以#开头的是注释
b.以/结尾的是目录
c.以/开头防止递归
d.以!开头表示取反
e.可以使用glob模式进行文件和文件夹的匹配
glob模式是指简化了的正则表达式:*匹配零个或多个任意字符;[abc]匹配任何一个列在方括号的字符;?只匹配一个任意字符;[0-9]在方括号中使用短划线分割两个字符,表示所有在这两个字符范围内的都可以匹配;两个**表示匹配任意中间目录
javascript
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
15.查看提交历史git log
git log 按照时间先后顺序列出所有的提交历史,最近的提交排在最上面
git log -2 只展示最新的两条提交记录,数字可以按需进行填写
git log -2 --pretty=oneline在一行上展示最近两天提交历史的信息
16.回退到指定的版本
git log --pretty=oneline在一行上展示所有的提交历史
git reset --hard <CommitID>根据指定的提交ID回退到指定版本
git reflog --pretty=oneline在旧版本中使用,查看命令操作的历史
git reset --hard <CommitID>再根据最近提交的Id,跳转到最新版本
五、本地仓库和远程仓库进行关联
1.新建空白远程仓库
2.远程仓库的两种访问方式(HTTPS,SSH)
a.HTTPS:零配置,但是每次访问时,需要重复输入Github的账号和密码才能访问成功
b.SSH:需要进行额外的配置,但是配置成功后,每次访问仓库时,不需要重复输入Github的账号和密码
3.基于HTTPS将本地仓库上传至Github
a.将本地仓库和远程仓库进行关联,并把远程仓库命名为origin
git remote add origin https://github.com/xxx/xxx.git
b.将本地仓库中的内容推送到远程的origin仓库中
git push -u origin master(第一次推送)
将本地最新代码同步到远程仓库中
git add 文件
git commit -m '描述信息'
git push origin master
4.生成SSH key
SSH key作用:实现本地仓库和Github之间的免登录的加密数据传输
两部分组成:id_rsa(私钥文件,存放于客户端的电脑中),id_rsa.pub(公钥文件,需要配置到github中)
打开git bash,输入ssh-keygen -t rsa -b 4096 -C '''注册邮箱',连续敲击回车3次,即可在C:/User/用户名文件夹/.ssh目录中生成id_rsa和id_rsa.pub两个文件
5.配置SSH key
打开id_rsa.pub文件,复制里面的内容
在浏览器中登录git,点击头像jian'tou→设置→安全设置/SSH公钥→添加公钥
6.检查github的SSH key是否配置成功
打开git bash,输入ssh -T git@github.com命令回车
7.基于SSH将本地仓库上传到github
git init 初始化本地仓库
git status -s
git add .
git status -s
git commit -m '描述信息'
git status -s
新建远程仓库
a.将本地仓库和远程仓库进行关联,并把远程仓库命名为origin
git remote add origin git@github.com:xxx/xxx.git
b.将本地仓库中的内容推送到远程的origin仓库中
git push -u origin master(第一次推送)
六.将远程仓库克隆到本地git clone
从其他服务器克隆一个已存在的git仓库
七、分支
1.master分支
在初始化git仓库时,git默认已经创建了一个名为master的分支。叫做主分支。
2.功能分支
程序员不能直接在master分支上进行功能开发,功能分支是专门用来开发新功能的分支,是临时从master分支上分叉出来的,当新功能完成后,最终需要合并到master主分支上。
3.查看分支列表git branch
4.创建新分支git branch 分支名称
基于当前分支,创建一个新的分支,此时,新分支中的代码和当前分支完全一样
执行完创建分支命令之后,用户当前所处的还是master分支
5.切换分支git checkout 分支名称
6.分支的快速创建和切换git checkout -b 分支名称
7.合并分支git merge
切换到master分支,在master分支上运行git merge命令
git checkout master
git merge login
8.删除分支git branch -d 分支名称
9.遇到冲突时的分支合并
如果在两个不同的分支中,对同一个文件进行了不同的修改,git就没法直接合并它们。需要打开这些包含冲突的文件然后手动解决
git checkout master
git merge reg
打开包含冲突的文件,手动解决冲突之后,再执行如下命令
git add .
git commit -m "解决了分支合并冲突"
八、远程分支操作
1.将本地分支推送至远端分支git push origin 分支名称
如果是第一次将本地分支推送至远程仓库需要运行如下命令,只在第一次推送的时候-u
git push -u 远程仓库的别名 本地分支名称:远程分支名称
如果希望远程分支的名称和本地分支名称保持一致,可以对命令进行简化
git push -u origin 分支名称
git push origin 分支名称
2.查看远程分支列表
git remote show 远程仓库名称
3.跟踪分支git checkout 远程分支名称
从远程仓库中,把对应的远程分支下载到本地仓库,保持本地分支和远程仓库分支名称相同
git checkout 远程分支名称
从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名
git checkout -b 本地分支名称 远程仓库名称/远程分支名称
4.拉取远程分支最新的代码
git pull
5.删除远程分支git push 远程仓库名称 --delete 远程分支名称
git push origin --delete login
九、其他
这些是在各种情况下使用的常见Git命令:
1.启动一个工作区(参见:git帮助教程)
clone将存储库克隆到一个新目录
init创建一个空的Git存储库或重新初始化一个现有的Git存储库
2.处理当前的变更(参见:git help everyday)
add将文件内容添加到索引中
mv移动或重命名文件、目录或符号链接
restore恢复工作树文件
rm从工作树和索引中删除文件
3.检查历史和状态(参见:git帮助修订)
bisect使用二进制搜索来查找引入bug的提交
diff显示提交、提交和工作树之间的更改
grep输出与模式匹配的行
log显示提交日志
show显示各种类型的对象
status显示工作树状态
4.成长,标记和调整你的共同历史
branch列出、创建、删除分支
commit提交将更改记录到存储库
merge将两个或多个开发历史记录连接在一起
rebase在另一个基本提示之上重新应用提交
reset将当前HEAD复位到指定状态
switch开关分支开关
tag创建、列出、删除或验证使用GPG签名的标签对象
5.协作(参见:git帮助工作流)
fetch从另一个存储库获取下载对象和引用
pull从另一个存储库或本地分支提取Fetch并与之集成
push更新远程参考和相关对象
'git help -a'和'git help -g'列出了可用的子命令和一些概念指南。参见'git help <command>'或'git help <concept>'阅读一个特定的子命令或概念。请参阅"git help git"了解系统概述。