Git
1. Setup and Config
config
DESCRIPTION
git 的配置文件为 .ini 格式, 由 sections, keys, values 三部分组成
# 注释为 # 或 ;
[section]
key = value
COMMANDS
list
列出配置文件所有 key,value
get
通过 section.key 形式来获取配置文件的值, 例如
git config get user.email
set
通过 section.key 形式为一个或多个选项设置值
git config set core.ignoreCase false
unset
通过 section.key 形式取消设置一个或多个配置选项的值
edit
打开编辑器修改配置文件
OPTIONS
--system
系统的全局配置文件, 最低优先级生效
--global
用户的配置文件
--local
项目的配置文件, 默认, 最高优先级生效
help
DESCRIPTION
帮助命令
OPTIONS
--config
列出可用的配置文件 key
--man
以 man 手册格式列出常用命令
2. Getting and Creating Projects
init
创建一个空的 Git 仓库或是重新初始化一个已经存在的仓库
clone
克隆一个仓库到新目录
3. Basic Snapshotting
add
DESCRIPTION
将变更加入到暂存区 (索引)
OPTIONS
<pathspec>...
git add *.txt
git add src/*.txt
git add file?.log
git add image[1-3].png
git add **/config.ini
git add .
git add :(top)/*.md
# 匹配 jpg 和 JPG
git add :(icase)*.jgp
git add . "! *.log"
status
显示工作树状态
commit
记录仓库的变化
diff
DESCRIPTION
默认比较工作区和暂存区差异
OPTIONS
--staged
较暂存区与上一次提交的差异
<旧版本> <新版本>
比较最新提交和上一次提交
git diff HEAD HEAD~1
restore
DESCRIPTION
默认丢弃工作区的修改
OPTIONS
--staged
比较暂存区和 HEAD 的差异, 将变动从暂存区撤回到工作区
reset
DESCRIPTION
将 HEAD 强行移到指定历史节点, 默认模式为--mixed
OPTIONS
--soft
只移动 HEAD 指针, 不碰暂存区和工作区
git reset --soft HEAD~4
--mixed
移动指针并清空暂存区, 工作区不变
--hard
移动指针, 暂存区和工作区也回到历史状态
notes
DESCRIPTION
不影响对象本身情况下, 添加,查看对象注释
COMMANDS
add
git notes add -m "这是我的备注"
remove <提交id>
git notes remove <提交id>
4. Branching and Merging
branch
DESCRIPTION
列出, 创建或删除分支
OPTIONS
-m <旧名> <新名>
重命名分支
-d
删除分支
<新分支名称> <起点>
从某个历史节点创建分支
-vv
查看每个分支进度, ahead 1 表示本地还有1个提交未推送到远程, behind 2表示远程还有2个提交未拉到本地
git branch -vv
checkout
DESCRIPTION
切换分支或恢复工作区文件
OPTIONS
-b
创建新分支并移动 HEAD 到新分支
git checkout -b <新分支>
--
git checkout -- hello.txt
git checkout <另一个分支> -- hello.txt
merge
DESCRIPTION
合并另一个分支到当前分支, 建议合并到 master 前先 merge master 在本地解决冲突
OPTIONS
--abort
撤销合并, 回到合并前状态
--no-ff
表示即使快进解决也创建合并提交
log
--oneline
一行显示一个提交
--graph --oneline --all
图形化显示提交
-n
指定显示最近几次提交
reflog
记录了每次 HEAD 移动, 配合 git reset --hard <哈希值> 可回退到某次操作
tag
DESCRIPTION
创建, 列出, 删除或验证 tag 对象
OPTIONS
-d
删除给定名字的现存标签
-f <新标签名> <旧标签名>
强制修改标签名
-a
通过创建标签对象, 制作注释性标签用来发布
git tag -a v0.1.0 -m "发布正式版v0.1.0"
git push origin v0.1.0
worktree
DESCRIPTION
管理多个工作区, 实现多个分支同时进行, 创建文件夹单独存放某分支并共享 .git 文件
COMMANDS
add <路径名> <分支名>
为指定的分支新建一个工作区
list
查看所有工作区
remove <路径名>
移除工作区
prune
手动删除工作区文件夹后, 清理无效工作区
5. Sharing and Updating Projects
fetch
pull
push
remote
DESCRIPTION
管理一组远程仓库
COMMANDS
add <别名> <URL>
添加远程仓库
set-url <别名> <新URL>
修改远程仓库地址
rename <旧别名> <新别名>
修改远程别名
remove <别名>
删除远程关联
OPTIONS
-v
git remote -v
6. Patching
rebase
将分支拆下来拼到 master 最新状态处
revert
自动创建一个与历史节点一致的新提交
7. Best Practices
创建远程仓库

配置 ssh
- 项目目录下生成 .git 文件
git init -b master
- 创建 ssh 密钥对, 过程中连续回车保持默认
ssh-keygen -t ed25519 -C "描述信息" -f c:/users/your_username/.ssh/id_ed25519_myblog
- 添加公钥到远程仓库设置中
cat c:/users/your_username/.ssh/id_ed25519_myblog.pub

- 编辑 .ssh 的 config 文件, 使得通过 URL 能找到对应的私钥
Host github.com-myblog
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_myblog
- 查看远程仓库
git remote -v
- 配置对远程仓库的 URL 引用,
# 修改则使用 git remote set-url
git remote add origin git@github.com-myblog:HsiehBro/myblog.git
- 验证是否返回 sucessful
ssh -T git@github.com-myblog
多分支开发
- 确保在主线上
git checkout master
- 创建并切换到长期的开发分支
git checkout -b dev
- 新地基推送到远程仓库
git push -u origin dev
- 确保在 dev 分支并拥有最新代码
git checkout dev
git pull origin dev
- 开发小功能 todo, 开启 feature 分支
git checkout -b feature/todo
- 在 feature 分支进行开发后, 切回 dev 分支合并功能
git checkout dev
git merge --no-ff feature/todo
- 删除临时分支
git branch -d feature/todo
推送上线
- 切回主线, 并合并 dev 分支
git checkout master
git merge --no-ff dev
- 打上里程碑标签
git tag -a v0.1.0 -m "发布 todo 功能新版本"
- 推送代码和标签到云端
git push origin master
git push origin v0.1.0