Skip to main content

Git 快速入门

Git 是一个分布式版本控制系统,用于跟踪和管理代码变更。

初始化仓库

1

创建目录

先在本地找一个合适的地方创建空目录:
mkdir gitspace
cd gitspace
2

初始化 Git 仓库

通过以下命令将目录变成 Git 可以管理的仓库:
git init
可以看到当前目录下多了一个 .git 目录,这个目录是 Git 用来跟踪管理版本库的。

配置用户信息

设置你的名字和 Email 地址:
git config --global user.name "your-name"
git config --global user.email "[email protected]"
查看配置信息:
git config --system --list  # 查看系统config
git config --global --list  # 查看当前用户(global)配置
git config --local --list   # 查看当前仓库配置信息

基本操作

添加文件

添加单个文件到暂存区:
git add demo1.txt
添加当前目录下所有文件:
git add .

提交更改

提交文件到仓库:
git commit -m "提交说明信息"
-m 后面输入的是本次提交的说明,可以输入任何内容,建议输入有意义的说明信息。

查看状态

查看仓库当前状态:
git status
查看修改的内容:
git diff demo1.txt

删除文件

从版本库中删除文件:
git rm demo2.txt
git add .
git commit -m "delete file"
恢复误删的文件:
git checkout -- demo2.txt

版本管理

查看历史记录

查看提交历史:
git log
简洁的单行显示:
git log --pretty=oneline

版本回退

回退到上一个版本:
git reset --hard HEAD^
版本说明:
  • HEAD 表示当前版本
  • HEAD^ 表示上一个版本
  • HEAD^^ 表示上上个版本
回退到指定版本:
git reset --hard commit_id
回退前请确保已保存所有重要更改,使用 git log --pretty=oneline 获取 commit_id。

远程仓库操作

查看远程仓库

列出远程仓库的简短名字:
git remote
显示对应的克隆地址:
git remote -v
查看更多远程仓库信息:
git remote show

添加远程仓库

给项目添加一个新的远程仓库:
git remote add <shortname> <url>
示例:
git remote add origin https://github.com/username/repo.git

远程仓库重命名与移除

重命名远程仓库:
git remote rename origin old-origin
移除远程仓库:
git remote remove old-origin

Git 三大操作对比

git clone

将远程仓库克隆到本地:
git clone <版本库的URL> [本地目录名]
特点:
  • 从无到有的克隆操作
  • 本地无需是一个仓库
  • 会设置额外的远程跟踪分支
  • .git 文件夹里存放着与远程仓库一模一样的版本库记录

git pull

git pull = git fetch + git merge,拉取远程分支更新并合并到本地:
git pull <远程主机> [远程分支名]:[本地分支名]
如果不指定分支名,则将远程 master 分支拉取并与本地当前分支合并。

git fetch

从远程仓库下载代码到本地:
git fetch origin master                # 从远程的origin仓库的master分支下载代码
git log -p master..origin/master      # 比较本地仓库和远程的区别
git merge origin/master                # 合并远程下载的代码到本地

三者区别

是否需要本地初始化仓库:
  • git clone: 不需要
  • git pull 和 git fetch: 需要
是否可以直接推送到远程:
  • git clone: 可以直接推送
  • git pull 和 git fetch: 需要先执行 git remote add 添加远程仓库后才能 push

分支管理

查看分支

git branch
当前分支前面会有一个星号标记。

创建与切换分支

创建新分支:
git branch dev
切换到分支:
git checkout dev

合并分支

将 dev 分支合并到 master 分支:
git checkout master
git merge dev

删除分支

git branch -d dev
或者:
git branch -d newtest

Git 提交信息规范

Commit message 包括三个部分: Header、Body 和 Footer。
<Header>

<Body>

<Footer>

Header 格式

<type>: <subject>
type 类型:
  • feat: 新功能(feature)
  • fix: 修补 bug
  • docs: 文档(documentation)
  • style: 格式(不影响代码运行的变动)
  • refactor: 重构
  • test: 增加测试
  • chore: 构建过程或辅助工具的变动
subject 规则:
  • 以动词开头,使用第一人称现在时(如 change,而不是 changed)
  • 第一个字母小写
  • 结尾不加句号(.)

Body 部分

Body 是对本次 commit 的详细描述:
More detailed explanatory text, if necessary. Wrap it to
about 72 characters or so.

Further paragraphs come after blank lines.

- Bullet points are okay, too
- Use a hanging indent
注意点:
  • 使用第一人称现在时
  • 说明代码变动的动机,以及与以前行为的对比
Footer 用于两种情况: 关联 Issue:
Issue #1, #2, #3
关闭 Issue:
Close #1, #2, #3

Revert

如果当前 commit 用于撤销以前的 commit,必须以 revert: 开头:
revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

示例

feat: 添加了分享功能

给每篇博文添加了分享功能

- 添加分享到微博功能
- 添加分享到微信功能
- 添加分享到朋友圈功能

Issue #1, #2
Close #1

Git GPG 签名

安装 GPG

macOS 下通过 Homebrew 安装:
brew install gpg

生成密钥

生成公钥和私钥:
gpg --full-generate-key
全部默认即可,除用户/邮箱/密码需要自定义。

查看密钥

gpg --list-keys        # 查看所有keys
gpg --list-public-keys # 查看所有公钥
gpg --list-secret-keys # 查看所有私钥
查看完整内容:
gpg --armor --export <邮箱或指纹或长密钥ID>              # 公钥
gpg --armor --export-secret-keys <邮箱或指纹或长密钥ID> # 私钥
导出到文件:
gpg --output mygpgkey_pub.gpg --armor --export <密钥ID>

GitHub 配置

1

添加 GPG 公钥到 GitHub

访问 https://github.com/settings/keys,点击 New GPG key,将公钥输入。
注意是公钥,不是私钥!
2

本地配置

git config --global gpg.program gpg
git config --global user.signingkey <长密钥ID>
git config --global commit.gpgsign true

解决签名问题

如果遇到 error: gpg failed to sign the data 错误:
brew upgrade gnupg
brew link --overwrite gnupg
brew install pinentry-mac
echo "pinentry-program /opt/homebrew/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent
编辑配置文件:
# ~/.zshrc
export GPG_TTY=$(tty)

# ~/bash_profile
export GPG_TTY=$(tty)
重启电脑后测试:
echo "test" | gpg --clearsign

常见问题

git checkout -- filename  # 撤销单个文件
git checkout .            # 撤销所有修改
git log -- filename
git log -p filename  # 查看详细的修改内容
git stash        # 保存当前工作
git stash list   # 查看保存的工作
git stash pop    # 恢复工作并删除stash
git stash apply  # 恢复工作但保留stash

Build docs developers (and LLMs) love