Appearance
Git
CRUD
sh
# 追加改动 -> 最近 commit,不修改提交信息
git commit --amend --no-edit
# 追加改动 -> 最近 commit,修改提交信息
git commit --amend -m <commit_msg>
# 推送
git push <remote> <commit_id>:<remote_ref>
# 本地 HEAD -> 远端 test,test 已存在
git push origin HEAD:test
# 本地 abcd123 -> 远端 test,test 不存在
git push origin abcd123:refs/heads/test
# 查找历史提交内容
git log -S "console.log('test')" -p
# 只看找到的 commit
git log -S "console.log('test')" --oneline
git show <commit_id>
# 只在某文件中查找
git log -S "console.log('test')" -p -- src/utils.jsWorktree
○ 管理模式
sh
cd /work
mkdir -p ${project}
cd ${project}
git clone ${url} base
cd base
git worktree add -b ${branch} ${path} ${remote_branch}
git worktree add -b release_xxx ../release_xxx origin/release_xxx○ 常用
sh
# 查看所有 worktree
git worktree list --porcelain
# 强制删除 worktree,即使有未提交的改动
git worktree remove -f ${path}
git worktree remove -f ../release_xxx
# 清理无用的 worktree,即对应目录已被删除,但还在 worktree list,从 list 中也移除
git worktree prune
git worktree prune -n切换到某个历史记录指针
分支本质对应着该分支最新提交的指针。
sh
# 切换到已有的 dev 分支
git switch dev
# 切回上个分支
git switch -
# 从当前分支创建新分支并切换过去
git switch -c feature/login
# 从某个提交创建新分支并切换过去
git switch -c hotfix/login a1b2c3d4
# 从某个远程分支创建新分支并切换过去
git fetch
git switch -c dev --track origin/dev
# 切换到已有分支,并带上本地更改内容
git switch -m dev
# 从当前分支进入分离头指针
git switch --detach
# 从某个提交进入分离头指针
git switch --detach a1b2c3d4
# 从某个标签进入分离头指针,两种
git switch v1.0
git switch --detach v1.0
# 从远端分支进入分离头指针,前提:远端分支没有下游的本地分支
git switch origin/dev
# 保存分离头指针处的修改,提交后创建新分支
git switch -c hotfix/login文件内容恢复
sh
# 不修改,恢复工作区文件为暂存区内容,丢弃修改
git restore main.ts
# 不暂存,恢复暂存区文件为最新提交内容,保留修改在工作区
git restore --staged README.md
# 不修改且不暂存,恢复工作区、暂存区文件为最近提交内容,丢弃修改
git restore --staged --worktree README.md
# 从某个提交中恢复文件内容
git restore --source a1b2c3d4 main.ts
# 从某个分支中恢复文件内容
git restore --source=feature/login main.ts
# 从暂存区恢复部分文件内容,交互模式
git restore -p main.ts变更内容查看
sh
# 工作区相对 staged 的改动
git diff --stat
# staged 相对 HEAD 的改动
git diff --cached --stat
# 工作区、staged 相对 HEAD 的改动
git diff HEAD --stat
# 旧历史相对较新历史的改动
git diff ${old_commit} ${new_commit} --stat
git diff ${old_commit} HEAD --stat
# 选项,仅看各文件及其增减行数统计
--numstat
# 选项,仅看汇总,总改动文件数量、增减行数
--shortstat补充
sh
# 获取 git 根目录
git rev-parse --show-toplevel
# 获取文件相对最新提交的改动块
git diff --unified=0 HEAD -- relative/path/to/file
# 获取相对最新提交有改动的文件列表
git diff --name-only HEAD
# 获取暂存区、工作区的文件列表,包含未跟踪、已忽略文件,前提:在 git 根目录执行命令
git ls-files --others --exclude-standard
# 从某个提交中提取文件并保存到指定位置,前提:目标路径所在目录必须存在
git show HEAD:README.md > "D:/tmp/README-tmp.md"