04 Git 的常用命令
常用 git 命令
更多内容请查看 Git 文档。
配置
| 命令 | 说明 |
|---|---|
git config --global user.name "[name]" | 配置用户名 |
git config --global user.email "[email]" | 配置邮箱 |
创建版本库
| 命令 | 说明 |
|---|---|
git clone <url> | 克隆远程版本库 |
git init | 初始化本地版本库 |
修改和提交
| 命令 | 说明 |
|---|---|
git status | 查看状态 |
git diff | 查看变更内容 |
git add . | 跟踪所有改动过的文件 |
git add <file> | 跟踪指定的文件 |
git mv <old> <new> | 文件改名 |
git rm <file> | 删除文件 |
git rm --cached <file> | 停止跟踪文件但不删除 |
git commit -m "commit messages" | 提交所有更新过的文件 |
git commit --amend | 修改最后一次改动 |
查看提交历史
| 命令 | 说明 |
|---|---|
git log | 查看提交历史 |
git log -p <file> | 查看指定文件的提交历史 |
git blame <file> | 以列表方式查看指定文件的提交历史 |
撤销
| 命令 | 说明 |
|---|---|
git reset --hard HEAD | 撤销工作目录中所有未提交文件的修改内容 |
git checkout HEAD <file> | 撤销指定的未提交文件的修改内容 |
git revert <commit> | 撤销指定的提交 |
git log --before="1 days" | 退回到之前 1 天的版本 |
分支与标签
| 命令 | 说明 |
|---|---|
git stash | 保存当前工作进度 |
git stash pop | 恢复之前保存的工作进度 |
git branch | 显示所有本地分支 |
git checkout <branch/tag> | 切换到指定分支和标签 |
git branch <new-branch> | 创建新分支 |
git branch -d <branch> | 删除本地分支 |
git tag | 列出所有本地标签 |
git tag <tagname> | 基于最新提交创建标签 |
git tag -d <tagname> | 删除标签 |
合并与衍合
| 命令 | 说明 |
|---|---|
git merge <branch> | 合并指定分支到当前分支 |
git rebase <branch> | 衍合指定分支到当前分支 |
远程操作
| 命令 | 说明 |
|---|---|
git remote -v | 查看远程版本库信息 |
git remote show <remote> | 查看指定远程版本库信息 |
git remote add <remote> <url> | 添加远程版本库 |
git fetch <remote> | 从远程库获取代码 |
git pull <remote> <branch> | 下载代码及快速合并 |
git push <remote> <branch> | 上传代码及快速合并 |
git push <remote> :<branch/tag-name> | 删除远程分支或标签 |
git push --tags | 上传所有标签 |
git push origin main | 推送到远程 main 分支 |
设置用户信息
安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:
git config --global user.name "wwvl"
git config --global user.email "wwvl@example.com"- 如果使用了
--global选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情,Git 都会使用那些信息。 - 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有
--global选项的命令来配置。
确认在 Git 中正确设置了用户信息:
$ git config --global user.name
wwvl
$ git config --global user.email
wwvl@example.com查看配置信息
Git 自带一个 git config 的工具来帮助设置或查看 Git 仓库和全局的配置信息。在命令行输入 git config --list 来查看当前的配置信息。
$ git config --list
user.name=wwvl
user.email=wwvl@example.com查看帮助信息
当使用 Git 时,可能会遇到一些不太明白的命令行选项,这时可以通过 git help [command] 来查看某个 Git 命令的详细帮助信息。
git help config配置 SSH 公钥
SSH 的全称为 Secure Shell 即安全外壳协议,是一种加密的网络传输协议。它能够在公开的网络环境中提供安全的数据传输环境,通常用于登录远程主机与推拉代码。
同样一个 SSH 公钥文件,如果添加至某一个代码仓库,则称为部署公钥,配置后默认拥有该项目的只读权限,支持新增读写权限;如果添加至团队设置中心,则称为团队部署公钥,仅拥有只读权限;如果添加至个人账户,称为账户 SSH 公钥,配置后拥有账户内所有代码仓库的读写权限。同一个 SSH 公钥无法既作为部署公钥,又作为个人账户 SSH 公钥。
TIP
若 SSH 公钥未用作账户 SSH 公钥,但添加为部署公钥时依然提示错误,那么有可能是此公钥已被其他人用作账户 SSH 公钥。若您的名下有多个团队,也可能是在其他团队中的个人账户设置中添加了此 SSH 公钥。
生成公钥
# 创建新的 SSH 私钥与公钥密钥对,输入你的邮箱作为标签
ssh-keygen -m PEM -t ed25519 -C "wwvl@example.com"
# 输入文件保存路径(推荐使用默认地址),默认为 ~/.ssh/id_ed25519,直接回车即可;若设置密码,则每次使用 SSH 方式推送代码时都会要求输入密码
Enter file in which to save the key (/Users/wwvl/.ssh/id_ed25519): [Press enter]
# 输入 passphrase,直接回车即可;若设置密码,则每次使用 SSH 方式推送代码时都会要求输入密码
Enter passphrase (empty for no passphrase):
# 再次输入 passphrase,直接回车即可
Enter same passphrase again:TIP
- 若你需要使用多个 SSH 密钥对,在
Enter file in which to save the key步骤时,输入一个新的文件名称就可以避免覆盖已有的密钥对。有关 SSH 更多信息可参考 维基百科。 - 若您的系统不支持 Ed25519 算法,请使用命令
ssh-keygen -m PEM -t rsa -b 4096 -C "wwvl@example.com"。
成功之后显示如下信息:
Your identification has been saved in /Users/wwvl/.ssh/id_ed25519.
# Your public key has been saved in /Users/wwvl/.ssh/id_ed25519.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db wwvl@example.com将 SSH 密钥添加到 ssh-agent
Windows:
# 在后台启动 ssh-agent
Get-Service -Name ssh-agent | Set-Service -StartupType Manual
Start-Service ssh-agent
# 将 SSH 私钥添加到 ssh-agent
ssh-add c:/Users/wwvl/.ssh/id_ed25519Linux:
# 在后台启动 ssh-agent
$ eval "$(ssh-agent -s)"
Agent pid 59566
# 将 SSH 私钥添加到 ssh-agent
$ ssh-add ~/.ssh/id_ed25519添加公钥
打开上文中生成的密钥对的地址(通常为 ~/.ssh/ 文件夹)找到后缀为 pub 的公钥文件,使用 cat 命令输出所有内容并复制。
# Windows
clip < /Users/wwvl/.ssh/id_ed25519.pub
clip < ~/.ssh/id_ed25519.pub
# Linux
cat ~/.ssh/id_ed25519.pub | clip打开远程仓库平台(如 GitHub,Coding.net 等)添加新创建的 SSH 公钥。
测试 SSH 连接
$ ssh -T git@github.com # coding.net: ssh -T git@e.coding.net
# Attempts to ssh to GitHub
> The authenticity of host 'github.com (IP ADDRESS)' can't be established.
> ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
> Are you sure you want to continue connecting (yes/no)? yes
> Hi wwvl! You've successfully authenticated, but GitHub does not
> provide shell access.密钥指纹鉴权
代码安全是永不过时的议题,为了保证您所连接的远端仓库是真正的 CODING 代码仓库,现提供 SSH 密钥指纹用于鉴权。您只需要在本地运行命令后,验证返回的结果就可以知晓远端代码仓库的真实性。
验证 SHA256 算法指纹
查看本地 .ssh/know_hosts 文件中关于 e.coding.net 的 SHA256 算法的指纹,如果返回值为 jok3FH7q5LJ6qvE7iPNehBgXRw51ErE77S0Dn+Vg/Ik,则证明您连接到了正确的 CODING 服务器。
$ ssh-keygen -lf ~/.ssh/known_hosts
2048 SHA256:jok3FH7q5LJ6qvE7iPNehBgXRw51ErE77S0Dn+Vg/Ik e.coding.net, (RSA)验证 MD5 算法指纹
查看本地 .ssh/know_hosts 文件中关于 e.coding.net 的 MD5 算法的指纹,如果返回值是 98:ab:2b:30:60:00:82:86:bb:85:db:87:22:c4:4f:b1,则证明您连接到了正确的 CODING 服务器。
$ ssh-keygen -E md5 -lf ~/.ssh/known_hosts
2048 MD5:98:ab:2b:30:60:00:82:86:bb:85:db:87:22:c4:4f:b1 e.coding.net, (RSA)