道破——Git Bash
1. 原理
Git是一个基于快照的分布式版本控制系统,通常用于代码版本控制。
在使用上需了解工作区、暂存区、本地仓库、远程仓库,尤其是分支的概念。
工作区、暂存区、本地仓库和分支是组成一个本地计算机代码版本控制中最核心的功能。
远程仓库是为保证不同时间、不同地点的开发人员协同工作,保证代码数据安全、分布式部署在不同机房的系统,
类似GitHub、GitLab、Gitee等开放托管站点,也可以是自己公司内部搭建的私有托管服务。
一个简单且完整的项目代码版本控制流程:
提交: 从初始化
git init开始,对工作区文件的修改通过git add加入暂存区, 通过git commit提交到本地仓库,再通过git push提交到远程仓库。获取: 从
远程仓库通过git clone克隆一份完整相同的项目代码副本到本地仓库, 通过git pull拉取远程仓库中项目代码的所有修改。项目代码版本控制通过
分支和快照实现。 项目代码第一次提交到本地仓库需要创建或指定一个主分支main,也就是发行版分支, 以后创建的每个分支都是从指定的任意分支拷贝, 通过创建不同的分支,可以实现项目开发中不同开发小组的协同工作, 一个项目被分成"功能A"分支、"功能B"分支、"功能C"分支等等, 最后通过git merge将测试好的功能代码合并到发行版分支。 在本地仓库每一次git commit都生成一个版本快照, 并且通过索引实现保留多个提交版本的变更历史记录。分支和快照非常符合多元宇宙的概念。
访问 Git CheatSheet ,大致了解一下Git的工作原理。
也可访问 Git Book ,下载Pro git这本书,书中有超级详细的讲解。
2. 安装
前往
Git官网
下载最新版安装包,
一般情况下,安装步骤都选默认即可。
3. 常用命令
3.1. 配置本地用户信息
对你的commit操作设置关联的用户名
| |
对你的commit操作设置关联的邮箱地址
| |
启用有帮助的彩色命令行输出
| |
3.2. 创建仓库
当着手于一个新的仓库时,你只需创建一次。要么在本地创建,然后推送到 GitHub;要么通过 clone 一个现有仓库。
在使用过 git init 命令后,使用以下命令将本地仓库与一个 GitHub 上的空仓库连接起来:
| |
将现有目录转换为一个 Git 仓库
| |
Clone(下载)一个已存在于 GitHub 上的仓库,包括所有的文件、分支和提交(commits)
| |
3.3. 分支操作
分支是使用 Git 工作的一个重要部分。你做的任何提交都会发生在当前“checked out”到的分支上。使用 git status 查看那是哪个分支。
创建一个新分支
| |
切换到指定分支并更新工作目录(working directory)
| |
将指定分支的历史合并到当前分支。这通常在拉取请求(PR)中完成,但也是一个重要的 Git 操作。
| |
删除指定分支(-D属于强制执行)
| |
查看本地分支
| |
查看远程分支
| |
拉取远程分支
| |
列出当前分支的版本历史
| |
列出文件的版本历史,包括重命名
| |
展示两个分支之间的内容差异
| |
3.4. 文件处理
将文件进行快照处理用于版本控制
| |
将文件从Git仓库中删除,文件也一起删除,如果文件已经add到暂存区,加-f参数强制删除
| |
将文件从Git仓库中删除,但仍想保留在当前工作目录中
| |
查看即将提交的内容
| |
如果没有
--cached,将显示尚未添加到索引中的任何更改
获得当前仓库状态
| |
将文件快照永久地记录在版本历史中
| |
输出指定commit的元数据和内容变化
| |
严重危险操作,需考虑数据丢失的后果。
撤销所有 [commit] 后的的提交,在本地保存更改
| |
放弃所有历史,改回指定提交。
| |
3.5. 同步仓库
查看远程仓库地址
| |
添加远程仓库地址,aliasname为别名,
以后可以替代URL直接用,如果不指定aliasname,默认命名为origin
| |
在本地为远程仓库的别名换个名
| |
在本地不再使用并删除指定远程仓库
| |
查看origin仓库的更多信息
| |
如果想拉取origin仓库中有但你没有的信息
| |
拉取远程仓库的更新 git pull是git fetch和git merge的结合
| |
将所有本地分支提交上传到origin仓库
| |
将本地当前分支提交上传到origin仓库main分支, 注意每一次上传到新指定的分支都要加-u参数, 以后再上传到同一分支就直接git push就可以了。 -u就相当于指定默认的仓库地址和分支。
| |
3.6. 标签操作
查看已有的所有标签
| |
查看指定匹配已有的所有标签
| |
创建标签(轻量标签和附注标签)
| |
查看标签信息
| |
如果以前提交的版本忘打标签了,可以后期打标签
| |
以上列出了提交历史,你需要在命令的末尾指定提交的校验和(或部分校验和)。
| |
推送指定标签
| |
推送所有标签
| |
删除本地仓库指定标签
| |
删除远程仓库指定标签
| |
从远程仓库拉取标签
| |
但这样有一个问题就是远程仓库的标签是不建议修改的,修改后默认提交到远程仓库,远程仓库的标签也不会发生变化,建议直接从远程仓库拉取标签到本地并创建一个新分支,想提交再打新标签。
| |
4. .gitignore 文件
有时一些文件最好不要用 Git 跟踪。这通常在名为.gitignore的特殊文件中完成。
你可以在 github gitignore 找到有用的 .gitignore 文件模板。
文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
例子:
| |
5. ssh key
ssh key是一对密钥(公钥/私钥),用于通过ssh的方式免密提交到远程仓库。
生成新的ssh key
| |
一路回车即可。
6. 完整的例子
创建一个新项目并提交到远程仓库。
| |
将已存在的项目提交到远程仓库。
| |
从远程仓库拉取一个项目到本地。
| |