
作者序:我在知乎上搜索了有關 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.com
This is End -------------------------
文章若有誤人子弟之處,望及時指正,必有重謝!
參考文獻:
【1】Jon Loeliger,Matthew McCullough. Git版本控制管理(第2版). 人民郵電出版社
【2】Scott Chacon,Ben Straub. Pro Git. Apress
本文獻給頭號粉絲 @MMMay 以及 13k 僵尸粉大軍........