Skip to content

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 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:

bash
git config --global user.name "wwvl"
git config --global user.email "wwvl@example.com"
  • 如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情,Git 都会使用那些信息。
  • 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。

确认在 Git 中正确设置了用户信息:

shell
$ git config --global user.name
wwvl
$ git config --global user.email
wwvl@example.com

查看配置信息

Git 自带一个 git config 的工具来帮助设置或查看 Git 仓库和全局的配置信息。在命令行输入 git config --list 来查看当前的配置信息。

shell
$ git config --list
user.name=wwvl
user.email=wwvl@example.com

查看帮助信息

当使用 Git 时,可能会遇到一些不太明白的命令行选项,这时可以通过 git help [command] 来查看某个 Git 命令的详细帮助信息。

shell
git help config

配置 SSH 公钥

SSH 的全称为 Secure Shell 即安全外壳协议,是一种加密的网络传输协议。它能够在公开的网络环境中提供安全的数据传输环境,通常用于登录远程主机与推拉代码。

同样一个 SSH 公钥文件,如果添加至某一个代码仓库,则称为部署公钥,配置后默认拥有该项目的只读权限,支持新增读写权限;如果添加至团队设置中心,则称为团队部署公钥,仅拥有只读权限;如果添加至个人账户,称为账户 SSH 公钥,配置后拥有账户内所有代码仓库的读写权限。同一个 SSH 公钥无法既作为部署公钥,又作为个人账户 SSH 公钥。

TIP

若 SSH 公钥未用作账户 SSH 公钥,但添加为部署公钥时依然提示错误,那么有可能是此公钥已被其他人用作账户 SSH 公钥。若您的名下有多个团队,也可能是在其他团队中的个人账户设置中添加了此 SSH 公钥。

生成公钥

bash
# 创建新的 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"

成功之后显示如下信息:

bash
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:

bash
# 在后台启动 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_ed25519

Linux:

bash
# 在后台启动 ssh-agent
$ eval "$(ssh-agent -s)"
Agent pid 59566

# 将 SSH 私钥添加到 ssh-agent
$ ssh-add ~/.ssh/id_ed25519

添加公钥

打开上文中生成的密钥对的地址(通常为 ~/.ssh/ 文件夹)找到后缀为 pub 的公钥文件,使用 cat 命令输出所有内容并复制。

bash
# 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 连接

bash
$ 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 服务器。

bash
$ 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 服务器。

bash
$ 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)