「笔记」Git 常用指令
基础常用指令
指令 | 说明 |
---|---|
git init |
初始化一个 git 仓库 |
git clone [-o <remote>] <url> [<name>] |
克隆一个远程仓库,可指定项目文件夹名字 会自动设置好对应远程仓库的默认分支 |
git add [-i/--interactive] [-p/--patch] <file>/<dir>/* |
添加文件/文件夹/全部记录到到暂存区-i 交互式暂存-p 选择部分文件暂存 |
git status [-s/--short] |
查看哪些文件处于哪些状态,-s 输出紧凑格式文件前面的两个标志分别是暂存区和工作区状态 |
git diff [HEAD/--cached] |
无参数表示比较工作区和暂存区的区别HEAD 表示比较本地仓库和工作区的区别--cached 表示比较本地仓库和暂存区的区别 |
git rm [-f] [--cached] <file>/<dir> |
移除文件-f 强制删除--cached 仅删除暂存区的文件 |
git commit [-a] [-m "msg"] |
提交暂存区到本地仓库-a 会自动添加所有已修改文件-m "msg" 可以将提交消息写在一行 |
git mv <file_from> <file_to> |
对文件进行改名 相当于 rename -> rm -> add |
git log [more] |
查看提交日志,选项较多,下面介绍 |
git commit --amend |
撤销操作,替换上一次提交 |
git reset <file> |
取消暂存文件 |
git checkout -- <file> |
还原文件(Tips: 修改会丢失) |
git log
常用选项
git log [...] [<path>]
选项 | 说明 |
---|---|
-p |
按补丁格式显示每个提交引入的差异。 |
--stat |
显示每次提交的文件修改统计信息。 |
--shortstat |
只显示 --stat 中最后的行数修改添加移除统计。 |
--name-only |
仅在提交信息后显示已修改的文件清单。 |
--name-status |
显示新增、修改、删除的文件清单。 |
--abbrev-commit |
仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。 |
--relative-date |
使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。 |
--graph |
在日志旁以 ASCII 图形显示分支与合并历史。 |
--pretty=<mode> |
使用其他格式显示历史提交信息。可用的选项包括 oneline 、short 、full 、fuller 和 format (用来定义自己的格式)。 |
--oneline |
--pretty=oneline --abbrev-commit 合用的简写。 |
format
常用选项
选项 | 说明 |
---|---|
%H |
提交的完整哈希值 |
%h |
提交的简写哈希值 |
%T |
树的完整哈希值 |
%t |
树的简写哈希值 |
%P |
父提交的完整哈希值 |
%p |
父提交的简写哈希值 |
%an |
作者名字 |
%ae |
作者的电子邮件地址 |
%ad |
作者修订日期(可以用 –date=选项 来定制格式) |
%ar |
作者修订日期,按多久以前的方式显示 |
%cn |
提交者的名字 |
%ce |
提交者的电子邮件地址 |
%cd |
提交日期 |
%cr |
提交日期(距今多长时间) |
%s |
提交说明 |
限制输出的常用选项
选项 | 说明 |
---|---|
-<n> |
仅显示最近的 n 条提交。 |
--since /--after |
仅显示指定时间之后的提交。 |
--until /--before |
仅显示指定时间之前的提交。 |
--author |
仅显示作者匹配指定字符串的提交。 |
--committer |
仅显示提交者匹配指定字符串的提交。 |
--grep |
仅显示提交说明中包含指定字符串的提交。 |
-S |
仅显示添加或删除内容匹配指定字符串的提交。 |
--no-merges |
隐藏合并提交 |
远程仓库
指令 | 说明 |
---|---|
git remote [-v] |
查看远程仓库-v 显示对应url |
git remote add <remote> <url> |
添加远程仓库 |
git remote rm/remove <remote> |
删除远程仓库 |
git remote show <remote> |
查看远程仓库信息 |
git remote rename <remote> <name> > |
重命名远程仓库名 |
git fetch <remote> |
拉取指定远程仓库的信息(不会合并) |
git pull <remote> |
拉取并合并指定远程仓库 |
git push <remote> <branch> |
推送到远程指定分支 |
标签
指令 | 说明 |
---|---|
git tag [-l/--lig] <grep> |
查看所有标签,指定显示必须带-l 指定显示如: git tag -l "v1.8.*" |
git tag -a <tag> -m "msg" |
添加附注标签 |
git tag <tag> |
添加轻量标签 |
git show <tag> |
显示标签信息 |
git push origin <tag> |
推送指定标签 |
git push origin --tags |
推送不在远程仓库的所有标签 |
git tag -d <tag> |
删除标签 |
git push <remote> :refs/tags/<tag> |
删除远程标签1 |
git push <remote> --delete <tag> |
删除远程标签2 |
git checkout <tag> |
检出标签 |
给过去的提交打标签
1 | $ git log --pretty=oneline |
分支常用指令
指令 | 说明 |
---|---|
git branch [-v] [-vv] [--merged] [--no-merged] |
-v 查看所有分支,* 表示当前分支-vv 包含更多信息附带最后一次提交 查看已经合并/未合并分支 |
git branch [-d/D] <branch> |
新建分支-d 删除分支-D 强制删除未合并分支 |
git checkout [-b] <branch> |
切换分支-b 会先新建再切换 |
git log [more] --decorate |
查看分支所指的对象 |
git log --oneline --decorate --graph --all |
查看分叉历史 |
git merge <branch> |
合并指定分支到当前分支 |
git branch -u/--set-upstream-to <remote>/<branch> |
跟踪远程分支 |
HEAD
指向当前所在的分支,切换分支后,所有的提交会在新分支上移动
所有的切换操作的都是本地分支,远程分支只是一个指向某快照的指针 可以选择合并到主分支开发
如果想开发非主分支,可以新建一个分支并跟踪分支 git checkout -b test origin/test
由于比较常用,git checkout --track origin/test
git checkout test
可以实现一样的效果
使用 git status
查看合并冲突,解决合并冲突后,使用 git add
标记冲突已解决
其他说明
1 | # 分支信息中 `ahead` 表示没提交到远程分支,`behind` 表示没拉取下来 |
变基
只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行
变基操作
1 | git rebase master # 相当于把当前分支合并到 master |
常用设置
1 | # 设置默认编辑器 |
忽略文件
新建 .gitignore
文件,可以讲非项目文件进行忽略,子目录也可以有改文件,只作用于子目录
1 | # 忽略所有 .o/.a 结尾的文件 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 粥盐籽!