Git
Git
Git 是一个版本控制工具,既可以通过图形化的方式操作,也可以通过命令行来完成。
Git 版本管理分为四个板块:
-
Workspace:这是你的工作目录,包含了项目的所有文件。在这里你可以修改、创建和删除文件。Workspace包含了你正在工作的文件,这些文件可能已经被Git跟踪(tracked),也可能还没有被Git跟踪。
-
Index(也被称为暂存区或者stage):这是一 个中间区域,一个准备提交到Repository的更改列表。当你执行
git add
命令时,更改(添加、修改、删除)会被加入到Index中。然后通过执行git commit
命令,Index中的所有更改会被永久记录到Repository中。 -
Repository:这是Git存储项目历史记录的地方,可以认为它是一个数据库,存储了所有的提交(commit)和包含改动的文件。每次提交,Git都会保存一个快照并记录其详细信息。你可以回到任何一个已经提交的版本。
-
Remote:这是存储在网络上的版本库,可以让多个人共享和交换各自的更改。最常见的远程仓库服务包括GitHub、GitLab和Bitbucket等。你可以执行
git push
命令将本地Repository的更改推送到Remote,也可以执行git pull
或git fetch
命令从Remote获取最新的更改。
文件在这四个区域之间的转换关系如下:
在git中,有许多操作可以实现同样的效果,例如拉取远程分支
git pull
获取远程变化并自动合并到当前分支,默认不清理不再存在的远程跟踪分支。git fetch origin --prune
获取远程变化并清理不再存在的远程跟踪分支,但不合并到当前分支。
因此在AI编程的今天,如果我们的不了解git原理就使用提示词获取git命令,可能会出现意料之外的情况。git命令的全部难点都在于,如何处理与合并分支。
Interactive Git Courses了解如何在 GitHub (一个托管和协作管理 Git 仓库的平台)团队中使用 Git
基础操作
初始化一个新的 Git 仓库:
git init
克隆一个已存在的 Git 仓库:
git clone <repo_url>
查看当前的文件状态(哪些文件已修改或已准备提交等):
git status
添加文件到暂存区:
git add <file_name>
# 添加所有改动到暂存区
git add .
提交暂存区的改动:
git commit -m "Your descriptive commit message"
查看提交历史:
git log
拉取远程仓库的改动并合并到当前分支:
# 对于个人的仓库,可以直接使用 git pull
git pull # 实际上是 git fetch 和 git merge 的组合
# 对于多人协作的项目,可以按如下流程
git fetch # 只拉取
git diff origin/main..main
# 查看本地与远程的差异
# 在 Git 中,A..B 两点语法表示"在 B 中但不在 A 中的提交
git fetch origin
# 约定俗成:当你克隆一个仓库时,Git 会自动将你克隆的远程仓库命名为 "origin"
# 可自定义:这个名称完全可以更改,不是强制的,可以是任何名称
git merge origin/feature-branch # 合并远程仓库的feature-branch分支
git fetch --prune # 获取更新并移除已删除的远程分支引用
设置用户名和邮箱用于推送分支(一次配置,长期有效):
git config --global user.name "您的姓名"
git config --global user.email "您的邮箱@example.com"
将改动推送到远程仓库:
git push
分支
git tag -l | xargs git tag -d #删除所有本地分支
git fetch origin --prune #从远程拉取所有信息
git branch -a # 查看远程分支
git branch # 查看本地分支
git branch newBranch # 创建本地分支
git checkout newBranch # 切换到本地分支
git checkout -b newBranch # 创建并切换到分支
git merge <branch_name> # 将指定的 branch_name 合并到当前分支
版本
git log # 查看你要回到的那个版本
git reset --hard HEAD^ # 回退到上个版本
git reset --hard commit_id # 退到/进到 指定commit_id
git push origin HEAD --force #将本地的修改提交到远程
Tag
git ls-remote --tags origin #查询远程tags
git tag #列出所有tag
git tag -l v1.* #列出符合条件的tag(筛选作用)
git tag [tag名] #创建轻量tag(无-m标注信息)
git tag -a [tag名] #创建含注解的tag
git push origin --tags #推送所有本地tag到远程
git push origin [本地tag名] #推送指定本地tag到远程
git tag -d [本地tag名] #删除本地指定tag
git push origin :refs/tags/[远程tag名] #删除远程指定tag
git fetch origin [远程tag名] #拉取远程指定tag
git show [tag名] #显示指定tag详细信息
git branch -a --contains Tag_V1.0.0 # 看看哪个分支包含这个tag/commit
Git commit 规范
Git commit的规范是为了更好的管理代码,方便后续的代码维护和版本回退。
因此它并不是一个硬性要求,但是在团队协作中,规范的commit message可以让团队更好的理解代码的变更。现在AI编辑器也可以自动生成格式优雅,内容准确的commit信息。
个人开发者也可以根据自己的习惯来定义规范,譬如:Gitmoji
Gitmoji是一种在Git提交消息中使用表情符号来表示提交目的的规范。每个表情符号(emoji)都代表着一种特定的提交类型,使提交消息更加生动和易读。Gitmoji 的目标是通过简单的图标和表情符号传达清晰的信息,从而提高代码提交历史的可读性和可理解性。
Gitmoji提供Vscode插件,可以在提交时选择对应的表情符号,然后填写提交信息。
Github Action
Github Action 是一种工作流,是 CI/CD 最常用的工具
- CI/CD(持续集成/持续部署)是自动化构建、测试和部署应用程序的实践,其主要目标是及早发现问题,并更快地发布到生产环境。
工作流是一个可配置的自动化过程,它将运行一个或多个作业。工作流由签入您的存储库的 YAML 文件定义,并在由存储库中的事件触发时运行,或者它们可以手动触发或按定义的时间表触发。
工作流在存储库的目录中定义.github/workflows,存储库可以有多个工作流,每个工作流可以执行一组不同的任务。例如,您可以有一个工作流来构建和测试拉取请求,另一个工作流在每次创建发布时部署您的应用程序,还有另一个工作流在每次有人打开新问题时添加标签。