本文翻译自 Eric Douglas 的文章,旨在作为我自己遵循这些指南的备忘录。
本文旨在为那些使用 Git 管理项目的人提供有益的提醒。
如果您是 Git 新手,请先阅读 参考资料 部分中列出的一些内容,然后再回来将本文用作速查表。
在 Git 命令前面,您会看到一些来自 oh-my-zsh 速查表 的别名。
让我们开始吧!
基础命令
git config --global user.name "您的名字"git config --global user.email "您的邮箱@example.com"git config --global core.editor <您喜欢的编辑器>- 例如:
git config --global core.editor vim
- 例如:
git init: 初始化一个新的 Git 仓库。
提交结构
git status(gst): 查看项目状态。- 工作区域:
- .git 目录 (.git Directory)
- 暂存区 (Staging Area)
- 工作目录 (Working Directory)

git add <文件名>(ga): 将文件添加到暂存区。git add .(gaa): 将所有文件添加到暂存区。git add *.js: 将所有.js文件添加到暂存区。git rm --cached <文件>: 从暂存区中移除一个新文件。git commit -m "我的第一次提交"(gcmsg): 创建一个带有消息的提交。git commit -v -a(gca):-v: 冗余模式,在底部显示差异(diff)和更多有意义的信息。-a: 类似于git add .,它会添加所有已被修改和删除的文件,但不包括那些 Git 尚未知晓的新文件。
git help <命令>: 打开相应命令的手册。git log(glg,glgg,glo,glog): 显示项目的所有提交/历史记录。
管理暂存区
git reset HEAD <文件名>(grh): 从暂存区中移除一个已被修改的文件。git reset HEAD(grh): 从暂存区中移除所有已被修改的文件。git checkout <文件名>(gco): 从暂存区中移除一个已被修改的文件,并撤销其所有更改。git commit -m "我的第一次提交" --amend: 将暂存区中的文件/修改合并到最后一次提交中。git commit -v -a --amend(gca!): 将暂存区中的文件/修改合并到最后一次提交中。- 专业提示 (PROTIP): 不要将修改发送到远程仓库后使用
--amend。此命令仅用于本地开发。 .gitignore: 告诉 Git 哪些文件不应被追踪的文件。- 您可以使用
git add <文件名> -f强制添加一个被忽略的文件。
- 您可以使用
git diff <文件名>(gd): 显示当前文件相对于其最后一次提交的修改。git diff(gd): 显示所有文件相对于其最后一次提交的修改。git reset HEAD~2 --soft: 从项目历史记录中移除最后两个提交,但不丢弃其中的修改。git reset HEAD~2 --hard: 从项目历史记录中移除最后两个提交,并且丢弃这些提交中的所有修改以及创建的新文件。git reset <提交>(--soft|--hard):--soft: 将所有更改的文件保留为“待提交的更改”。--hard: 丢弃自<提交>以来工作区中对已追踪文件的任何更改。
git reflog: 显示所有被“删除”的提交。git merge <提交哈希>: 还原提交。git add -i(ga -i): 打开交互模式。非常有用!- 注意: 配合选项 4: add untracked 可以快速添加新文件到
git add。 1 <回车>: 选择文件 1 添加到暂存区。1,3 <回车>: 选择文件 1 和 3 添加到暂存区。1-5 <回车>: 选择文件 1 到 5 添加到暂存区。-2 <回车>: 取消选择文件 2,不将其添加到暂存区。-2-4 <回车>: 取消选择文件 2 到 4,不将其添加到暂存区。
- 注意: 配合选项 4: add untracked 可以快速添加新文件到
git clean -f: 从工作区中移除(删除)未追踪的文件。
暂存与分支
暂存 (Stash)
git stash(gsta): 将暂存区中的所有文件移动到 *”Stash Area”,它充当另一种类型的 *Working Area。git stash list: 显示所有 Stash 的列表。git stash apply: 将最后创建的 Stash 中的所有文件恢复到暂存区。git stash apply stash@{2}: 将名为stash@{2}的 Stash 中的所有文件恢复到暂存区。- 注意:
stash@{0}永远是最新的 Stash。
- 注意:
git stash clear: 清除所有 Stash。git stash save "Stash名称": 保存一个新的 Stash 并赋予特定名称。git stash pop(gstp): 将最后创建的 Stash 中的所有文件恢复到暂存区,并将其从 Stash 列表中移除。git stash drop(gstd): 从 Stash 列表中移除最后创建的 Stash (stash@{0})。慎用!git stash drop stash@{2}: 从 Stash 列表中移除名为stash@{2}的 Stash。慎用!
分支 (Branch)
git checkout -b develop(gco): 创建一个名为 develop 的新分支,并从当前分支切换到该分支。git branch(gb): 列出所有分支。git checkout master(gcm): 切换到master分支。git merge <分支>(gm): 将一个分支合并到另一个分支。gitk --all &: 打开一个 GUI 来可视化您的分支和提交。- 您也可以尝试 GitKraken :)
git rebase master: 将master分支的修改合并到当前分支,并将当前分支的修改移动到这些新增内容之上。 ”…回溯 Head 以在其上重放您的工作”git rebase --continue: 在解决冲突后继续变基。
git branch -d <分支>: 删除一个分支。-D: 强制删除一个分支。
专业提示: 每个功能或缺陷修复都使用一个单独的分支。创建大量的分支没有问题!
git merge <分支> --squash: 将多个提交压缩为一个。--squash工作流:
1 | # 切换到 `master` 分支 |
rebase和merge的区别:- rebase:
- 保持历史记录是线性的;
- 破坏性: 移除最后一次提交并创建一个新的;
- 如果提交已经存在于远程服务器上,请不要使用此方法。
- merge:
- 适用于保留分支派生历史;
- 创建一个新的提交来统一两个分支。
- rebase:
管理远程仓库
git remote add <名称> <URL>: 添加一个新的将被追踪的远程仓库。git remote rm <名称>: 移除一个远程仓库。git push <远程> <远程分支>(gp,ggp): 将本地提交推送(Push)到指定分支的远程仓库。git fetch <远程> <远程分支>(gfa): 从远程仓库拉取(Fetch)新提交到特殊分支<远程>/<分支>。git pull <远程> <远程分支>(gl,ggl): 将远程仓库的更改合并到当前分支。在其默认模式下,git pull是git fetch后跟git merge的缩写。git pull --rebase(gup): 运行git rebase而不是git merge。
更多有用命令
git tag <名称>: 创建一个新标签 (例如v1.3)。git push --tags: 将所有标签推送到远程仓库。git push <标签>: 将特定标签推送到远程仓库。
Git 工作流

分支类型:
master、develop、feature、release、hotfix主要分支
master分支:origin/master: 始终反映 生产就绪 状态。
develop分支:origin/develop: 始终反映包含下一版本最新已交付开发更改的状态。
支持分支
feature分支:派生自:
develop。合并回:
develop。命名规范:
feature/功能名称。创建分支:
1
git checkout -b feature/my-feature develop
合并分支(完成
feature分支):1
2
3
4git checkout develop
git merge --no-ff feature/my-feature
git branch -d feature/my-feature
git push origin develop--no-ff标记会导致合并始终创建一个新的提交对象。这避免了丢失有关功能分支历史存在的信息,并将共同添加该功能的所有提交组合在一起。
release分支:派生自:
develop。合并回:
develop和master。命名规范:
release/release-v1.3。创建分支:
1
2
3git checkout -b release/release-v1.3 develop
# 升级您的软件版本到 v1.3
git commit -a -m "将版本号升级到 v1.3"- 合并分支(完成
release分支):
1
2
3
4
5
6
7
8
9
10
11# 合并到 master
git checkout master
git merge --no-ff release/release-v1.3
git tag -a v1.3
git push origin master && git push --tags
# 合并到 develop
git checkout develop
git merge --no-ff release/release-v1.3
git branch -d release/release-v1.3hotfix分支:派生自:
master。合并回:
develop和master。命名规范:
hotfix/hotfix-v1.3.1。创建分支:
1
2
3
4
5git checkout -b hotfix/hotfix-v1.3.1 develop
# 升级您的软件版本到 v1.3.1
git commit -a -m "将版本号升级到 v1.3.1"
# 修复缺陷后
git commit -m "修复严重的生产问题"- 合并分支(完成
hotfix分支):
1
2
3
4
5
6
7
8
9
10
11# 合并到 master
git checkout master
git merge --no-ff hotfix/hotfix-v1.3.1
git tag -a v1.3.1
git push origin master && git push --tags
# 合并到 develop
git checkout develop
git merge --no-ff hotfix/hotfix-v1.3.1
git branch -d hotfix/hotfix-v1.3.1