作者序:我在知乎上搜索了有关 Git 的学习文章,虽然点赞很多但我认为他们写得并不好,内容不够详尽,排版让人看得疲劳,所以我决定自己写几篇关于 Git 的学习文章。当别人提供的不好用就自己创造一个新的,这也是 Git 诞生的原因之一
前文链接:
Git 基础学习总结(学不会你锤我)zhuanlan.zhihu.com1. 创建仓库
方法一:克隆
通常情况下,仓库已经建好,我们需要从 gitlab 或者 github 上将仓库下载到本地
$ git clone <url> <custom_repository_name>
默认创建的文件夹名称为仓库名,如需自定可以替换 <custom_repository_name>
⚠️ 这个目录下不能有与仓库同名的文件夹,如果有需要保证文件夹内是空的,否则报错
方法二:初始化+添加
如果是首次创建仓库,则需要先在 github 或 gitlab 上创建一个仓库,创捷完成后,会生成一个地址,在本地找个空目录,
# 创建文件,或把项目需要的文件挪进来
$ ...
2. 提交更新
如前文所述,git 的文件状态会在三种状态间不断转换:
⚡ 检查当前文件状态 git status
# 显示简洁版
$ git status -s
$ git status --short
M apps/api/forms.py
M apps/api/views.py
⚡ 查看未暂存的文件变更 git diff
# 查看合并引入的内容
$ git diff --ours
⚡ 加入暂存区 git add
$ git add <file-1> <file-2>
----------------------------
-i, --interactive 交互式处理文件,避免输入文件名
-u, --update 将 modified 的文件加到暂存区
-p, --patch 加patch
⚡ 提交 git commit
$ git commit -m <message>
Note: 提交信息应少于 50 个字符(25个汉字)
提交的时候,若需要忽略某些文件,如.pyc,local_settings.py等,可以设定.gitnore文件
.gitignore 语法:
- 所有空行或者以 # 开头的行都会被 Git 忽略
- 可以使用标准的 glob 模式匹配
- 匹配模式可以以(/)开头防止递归
- 匹配模式可以以(/)结尾指定目录
- 要忽略指定模式以外的文件或目录,可以在模式前加上 !取反
⚡ 删除文件 git rm
删除某个 Tracked文件 不追踪 + 删除文件
$ git rm <filename>
删除某个既是 staged 也是 modified 的文件只能 --force
$ git rm -f <filename>
不追踪 + 保留文件 Tracked ---> Untracked
$ git rm --cached <filename>
⚡ 重命名/移动 git mv
$ git mv old.txt new.text
实际上,git 执行了下列三项指令
$ mv old.txt new.text
$ git rm old.txt
$ git add new.text
⚡ 暂存文件 git stash
$ git stash
$ git stash save
-------------------------
--patch 加 patch
--keep-index 不 stash 已暂存的文件
--include-untracked 包含未追踪的文件
查看暂存区
$ git stash list
恢复暂存的修改
{n
移除指定暂存
{n
直接将暂存移入新分支
[<stash>
⚡ 清理文件 git clean
$ git clean
--------------------
-f 直接删除未追踪的文件
-f -d 直接删除未追踪的文件和目录
-n 列出执行git clean将会被删除的文件
-i 交互式删除
⚠️注意:clean 不会删除 .gitignore排除的文件,删除排除文件加上 -x
$ git clean -f -d -x
3. 撤销
⚡ 修改最近一次提交的备注
$ git commit --amend
⚠️ 如果提交已经push到仓库,修改备注之后,需要执行git push -f,普通 push 会失败
$ git push -f
修改多个提交的备注 可用git rebase 解决
⚡ 撤销修改/回退版本
# 将某个文件回退到最新版本
$ git checkout HEAD <filename>
- --hard 选项是“硬”回退,回退不保留当前的任何修改
- -- soft 选项时“软”回退,回退并保留修改(即索引和工作目录的内容不变)
git reset 将 HEAD 指针指向指定的提交后,原始指针另存为 ORIG_HEAD
4.查看历史
通常情况下 git log 即可,当然也有一些实用的选项
$ git log -g 查看message与reflog
$ git log -p 查看各个差异
$ git log -p -2 指定显示数量
$ git log --stat 查看简略增删行统计
$ git log --graph 展示分支合并示意图与对应提交详情
显示的格式可以通过 --pretty 参数自定义
=oneline
⚡ 按日期或作者筛选 log
写工作日志或月总结,忘了上周自己做了哪些项目,此时用这项指令很有用
=2019-06-01 --until
⚡ 快速查看昨天 develop 分支上的提交
{yesterday
⚡ 列出所有提交者的提交统计
可以看到每一个提交者分别有多少次提交,以及每次提交的提交信息
$ git shortlog
⚡查看引用日志
其记录了最近几个月 HEAD 和分支引用所指向的历史
$ git reflog
下回分解: 远程仓库 | 分支 | 变基 | 合并
Git 基础学习总结3(学不会你锤我)zhuanlan.zhihu.comThis is End -------------------------
文章若有误人子弟之处,望及时指正,必有重谢!
参考文献:
【1】Jon Loeliger,Matthew McCullough. Git版本控制管理(第2版). 人民邮电出版社
【2】Scott Chacon,Ben Straub. Pro Git. Apress
本文献给头号粉丝 @MMMay 以及 13k 僵尸粉大军........