这章再总结下常用的其他 Git
命令。
6-1.状态 status
git status
是'神级'命令。
当不知道怎么操作的时候,输入它回车,就会提示你在哪条分支、哪个区域,当前可以进行什么操作。
可以利用 git status --help
来查看它的可使用的额外参数。
6-2.文件差别 diff
git diff
命令通常用来查看文件的差别更改。
shell
# 只能查看未暂存的文件差别
git diff <file>
# 只能查看暂存的文件差别
git diff --staged/cached
但相关的命令通常可以使用额外的可视化 diff-tool
替代,譬如 vscode
自带的功能。
6-3.提交日志 log
git log
用来查看日志。
shell
# 详细显示日志
git log
# 显示每次提交中文件的具体更改
git log -p
# 显示每次提交中统计信息
git log --stat
# 图像化显示每次提交
git log --graph
# 图像化显示每次提交 并精简日志信息
git log --graph --pretty=oneline
6-4.分支 branch
git branch
用来操作分支。
-l
: 查看本地分支。-r
: 查看远程分支。-a
: 查看所有分支。
shell
# 新建本地分支
git branch <branch>
# 删除本地分支
git branch -d <branch>
# 切换本地分支
git checkout <branch>
# 切换并新建本地分支
git checkout -b <branch>
# 删除本地除master以外的所有分支
git branch | grep -v "master" | xargs git branch -D
# 删除远程分支
git push <name> :<branch>
git push <name> -d/--delete <branch>
# 本地分支与远程分支建立联系 建立后,可直接使用git push/pull。省略掉分支名。
git branch --set-upstream <本地分支名> origin/<远程分支名>
6-5.标记 tag
git tag
用来给项目打标记。
值得一提的是,分支 branch
与标记 tag
很类似。也正因此,分支 branch
与标记 tag
不要有重名。
否则在新建分支的时候,可能有这样的错误:warning: refname 'branch-name' is ambiguous.
(名字是模棱不清的)
shell
# 查看已存在的tag列表(或者使用git tag -l)
git tag
# 创建一个本地tag
git tag <tag名>
# 创建带有message的本地tag
git tag <tag名> -m "message"
# 删除一个本地tag
git tag -d <tag名>
# 将本地的tag推送到远程仓库
git push <远程仓库名> <tag名>
# 删除远程的一个tag (或者git push <远程仓库名> --delete <tag名>)
git push <远程仓库名> :<tag名>
# 查看远程的所有tag
git ls-remote --tags origin
# 拉取远程分支与tag 不会覆盖本地
git fetch origin --prune
6-6.临时保存 stash
git stash
用来暂存文件的修改,方便用户在合适的时间再次释放。
整个的暂存列表是以栈形式来保存的。
shell
# 查看暂存列表
git stash list
# 暂存
git stash
# 释放最近一次的暂存
git stash pop/apply
# 释放索引为2的暂存
git stash pop/apply stash@{2}
# 丢弃索引为0的暂存
git stash drop stash@{0}
6-7.摘草莓 cherry-pick
git cherry-pick
用以将指定的提交(commit
)应用于当前分支。
shell
# 将指定的 commit 应用于当前分支
git cherry-pick <commit id>