Git GitHub 基础
git 是一个免费开源的版本控制系统,通常用于跟踪代码更变、更变人和团队协作。
术语
什么是 git?
git是一个开源且免费的版本控制系统
什么是版本控制?
版本控制是对文档、计算机、程序、大型网站和其他信息集合的更改(代码更改跟踪)的管理
专有名词
简写 | 解释 |
---|---|
Directory | 文件夹 |
Terminal or Command Line | 命令行 |
CLI | 命令行界面 |
cd | 更改目录 |
Code Editor | 写代码用的文本编辑器 |
Repository/repo | 项目仓库 |
GitHub | 一个存代码用的平台 |
git | 一种版本控制系统 |
注意: 不要混淆git与GitHub。 git是一个版本控制系统,它可以跟踪你的代码更改记录。你可以离线使用git。GitHub是一个可以托管项目代码的在线平台,可以与其他人协同工作。
git 命令
简写 | 解释 |
---|---|
clone | 将远程仓库(比如GitHub, Gitee)的内容复制一份到本地 |
add | 在git中跟踪文件的变化和更改 |
commit | 将文件保存在Git中 |
push | 将提交上传(git commit )到远程仓库,比如GitHub |
pull | 实现本地仓库与远程仓库的同步,与 push 相反 |
git和GitHub使用入门
安装 git
检查是否已经安装Git:
git --version
如果Git被正确安装,你应该会看到一个Git的版本号。如果未安装,参考如下安装方法:
- Mac: 使用 homebrew (一个包管理器) 安装git
- Debian/Ubuntu Linux:
apt-get install git
- Windows: 使用 setup program 安装
设置密钥对
GitHub 使用密钥对用于验证用户,此外在使用很多功能前必须设置好密钥对。(比如git clone
)
生成一组密钥对(将邮箱地址替换为你GitHub的邮箱):
ssh-keygen -t ed25519 -C "your_email@example.com"
默认情况下,会生成两个文件:
- id-rsa
- id-rsa.pub
id-rsa
是你的私钥,id-rsa.pub
是你的公钥。 请勿将私钥上传到其他地方,将会导致严重的安全风险。
你需要将id-rsa.pub
文件的内容复制到GitHub -> Settings
-> SSH and GPC keys
cat id-rsa.pub
git常见使用流程
以下是在本地设置 git 存储库并推送到远程的常见流程。
git init
git init
命令可以将当前普通文件夹转为git文件夹。
git init
所有的git文件夹应该会有一个隐藏的.git
目录。
.
├── .git
├── .gitignore
├── Chinese
├── English
└── Readme.md
git status
git status
命令可以打印当前 git 仓库的信息, 比如任何修改过的文件或新的文件。
# user @ machineName in ~/your/dir/path on git:main x [16:19:43]
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
English/post/2023/04.08.2023.Fundamental of Git and GitHub.md
nothing added to commit but untracked files present (use "git add" to track)
git add
可以使用 git add
命令跟踪文件的变化。
要跟踪所有已更改/新的文件:
git add .
要跟踪指定的文件:
git add [Your File Name]
git commit
git commit
将提交所有跟踪的文件更改。
git commit -m "Initial Commit" -m "Some more detailed desc."
- 第1个 -m 后是commit信息的标题
- 第2个 -m 后是commit信息的描述
注意: commit信息的标题为必填项,描述为可选项。
提交信息推荐规范
<type>(<scope>): <subject>
<commit类型>(影响范围): 具体描述
举例
fix(DAO): fixed invalid user table indexes.
type
type指明git commit的类别,应该使用以下类型,也可根据团队自行增减
feat
: 新增功能fix
: 修复 bugdocs
: 仅仅修改了文档,比如 README, CHANGELOG等等test
: 增加/修改测试用例,包括单元测试、集成测试等style
: 修改了空行、缩进格式、引用包排序等等(不改变代码逻辑)perf
: 优化相关内容,比如提升性能、体验、算法等refactor
: 代码重构,「没有新功能或者bug修复」chore
: 改变构建流程、或者增加依赖库、工具等revert
: 回滚到上一个版本merge
: 代码合并
scope(可选)
scope用于说明 commit 影响的范围,根据不同项目有不同层次描述。若没有特殊规定,也可以描述影响的哪些功能等。
subject
subject是commit目的的简短描述,不超过50/80个字符,一般git提交的时候会有颜色提示。
- 若英文用不惯,那么推荐使用中文
- 若是开源代码,一律推荐统一英文,英文不行可以翻译软件用起来
- 若是开源代码,可以再附加对应的issue地址
- 结尾不加标点符号
git push / git remote
git push
会将更改推送到远程仓库。
注意: 如果您将远程仓库克隆到本地,则远程仓库源已自动设置。 但是如果你在本地创建一个git仓库,你需要在推送前先设置远程仓库源。
设置远程仓库源:
git remote add origin [Repository Address]
查看远程仓库源:
git remote -v
将更改推送的远程仓库:
git push origin [branch name]
例如 (推送主分支):
git push origin main
git clone
提示: 强烈建议使用一些代码编辑器,例如 VS Code,并与 Git 一起使用。
git clone [Repository Address]
例如:
git clone git@github.com:NianwenDan/DSTScripts.git
git log
git log
可以显示历史的提交记录。
commit XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (HEAD -> main, origin/main)
Author: Tom <machine@machine.localdomain>
Date: Sat Apr 8 15:05:30 2023 -0700
Add 11.20.2022 to Chinese Post
commit XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Author: Tom <machine@machine.localdomain>
Date: Sat Apr 8 14:58:03 2023 -0700
.DS_Store banished!
commit XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Author: Tom <machine@machine.localdomain>
Date: Sat Apr 8 14:56:52 2023 -0700
git reset
git reset
可以撤消提交或预存区(stage)。
撤销一个预存区(stage):
git reset [File Name]
撤销上一次提交:
git reste HEAD~1
撤销指定的预存区(stage):
git reset [Hash Number]
撤消到特定阶段并删除之前的提交:
git reset --hard [Hash Number]
常见工作流
一些稍微更高级的使用方法
git 的分支
优势:
- 在不破坏主分支的情况下开发新功能
- 团队合作更加方便
可能产生的问题:
- 合并冲突
git branch
列举所有分支:
git branch
* main
(END)
删除 本地 feature
的分支:
git branch -d feature
删除 远程仓库 feature
的分支:
git push origin --delete feature
git checkout
git checkout
可以在不同的分支之间切换,或者创建一个新的分支。
新建一个分支:
git checkout -b feature
切换至 main
分支:
git checkout main
git diff
git diff
可以输出工作区和暂存区的(不同)。
git merge
git merge
可以合并分支。
Pull Request (PR)
合并请求 (Pull Request) 用于请求仓库的作者检查提交的代码。作者可以选择将代码并合并到其他分支。
Merge Conflicts
在文本编辑器或 GitHub 上解决冲突更容易。
评论已关闭