我?guī)缀趺刻於际褂?Git,但仍然無法記住很多命令。
通常,只需要記住下圖中的 6 個命令就足以供日常使用。但是,為了確保使用地很順滑,其實你應該記住 60 到 100 個命令。

Git 相關術語
Git 中不可避免會遇到下面幾個術語,不搞清楚它們,后面只會更懵逼。
- 工作區(qū)(Working Directory)
- 暫存區(qū)(Stage/Index)
- 本地歷史倉庫(Repository)
- 遠程倉庫(Remote)
對照下圖,下面一一進行介紹。

工作區(qū)
我們寫代碼的地方就是工作區(qū),就是在電腦里能看到的目錄,我們當前的工作空間。
暫存區(qū)
暫存區(qū)(stage)就是每次 git add 時,文件的修改存放的地方。
git commit 時就是一次性把暫存區(qū)所有修改提交到分支。
本地倉庫
我們可以把暫存區(qū)的內(nèi)容提交到我們的本地倉庫,又名版本庫(respository),可將其理解成一個目錄,該目錄下的所有文件都會被 git 管理起來,每個文件的修改、刪除、git 都能跟蹤,以便隨時追蹤歷史,和還原。
.git 隱藏目錄就是 git 的版本庫,里面存了很多東西,最重要的就是 stage(index) 暫存區(qū),還有第一個分支 master,以及指向 master 的 HEAD 指針。

遠程倉庫
遠程倉庫其實就是找一臺電腦充當服務器的角色,每天 24 小時開機,其他每個人都從這個遠程倉庫克隆一份到自己的電腦上,并且各自把各自的提交推送到服務器倉庫里,也從服務器倉庫中拉取別人的提交。
比如,GitHub、Gitlab 等都屬于遠程倉庫。
下面,舉一個形象化的例子來幫助大家理解上面幾個概念:
比如我們在逛著某寶:
1、看到了心儀的物品,我們可以把商品添加到購物車(暫存區(qū)),我們可能會頻繁的添加商品(add)或者移除商品(checkout),在這個過程中我們可以隨便嗨,反正還沒給錢;
2、接著我們挑的七七八八了,接著我們就要提交我們的訂單了,點擊提交訂單(commit),接著會生成一個商品的訂單列表(快照),我們還可以在提交的時候添加點備注信息,比如要什么顏色(commit -m "顏色"),好的,此時訂單提交了,但是我們還沒支付(Push),我們可以在自己的賬戶未支付訂單列表(本地倉庫)中找到我們的這個訂單訂單(快照),也可以看到自己以前的一些訂單記錄;
3、再接著我們選擇這個還沒付款的訂單,進行支付(Push),付款完成后,商家(遠程倉庫)就會收到這個訂單,然后發(fā)貨...
其他一些重要概念
HEAD
HEAD 就是當前活躍分支的游標,你現(xiàn)在在哪兒,HEAD 就指向哪兒。
HEAD 是一個指針,總是指向當前分支。倉庫版本的回退和追蹤都是通過操作 HEAD 指針來完成。
不過 HEAD 并非只能指向分支的最頂端(時間節(jié)點距今最近的那個),實際上它可以指向任何一個節(jié)點,它就是 Git 內(nèi)部用來追蹤當前位置的東東。
標簽
有了 commit id 為什么還要tag?因為 commit id 不好找,tag 是有意義的名字,它與 commit 綁在一起。
其他要點
1、每一次 git commit,都會生成一個 commit id 記錄該次提交,Git 都會將它們串成一條時間線,這條時間線就是一個分支。
2、因為創(chuàng)建、合并、刪除分支都很快,所以 git 鼓勵你使用分支完成某個任務,合并后再刪除分支。過程比直接在 master 分支工作更安全,且效果一樣。
3、分支策略:master 分支應該是非常穩(wěn)定的,僅用來發(fā)布新版本,平時不能在上面干活,干活都在 dev 分支,dev 是不穩(wěn)定的,到 1.0 發(fā)布時,再將 dev 合并到 master 上,由 master 發(fā)布新版本。
Git 常用命令
1. 創(chuàng)建一個新的倉庫
# 在當前目錄新建一個 Git 倉庫
$ git init
# 新建一個目錄,并將其初始化為 Git 倉庫
$ git init [project-name]
# 從遠程下載一個倉庫
$ git clone [url]
2. 配置
Git 的配置文件是 .gitconfig,可以放在用戶的主目錄(全局配置)下或項目目錄下(項目配置)。
# 顯示當前的 Git 配置
$ git config --list
# 編輯 Git 配置
$ git config -e [--global]
# 設置用來提交代碼的用戶信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
3. 添加/刪除文件
# 將指定文件添加到暫存區(qū)中
$ git add [file1] [file2] ...
# 將指定目錄添加到暫存區(qū)中,包括子目錄
$ git add [dir]
# 將當前目錄中的所有文件添加到暫存區(qū)中
$ git add .
# 在添加每個更改之前都進行確認
# 對于同一個文件的多個更改,建議分開提交
$ git add -p
# 將指定文件從工作區(qū)刪除,并將本次刪除添加到暫存區(qū)
$ git rm [file1] [file2] ...
# 停止追蹤指定的文件,不會刪除文件
$ git rm --cached [file]
# 對指定文件進行重命名,并添加到暫存區(qū)中
$ git mv [file-original] [file-renamed]
4. 代碼提交相關
# 將暫存區(qū)中的文件提交到代碼倉庫
$ git commit -m [message]
# 將指定的文件從暫存區(qū)中提交到倉庫
$ git commit [file1] [file2] ... -m [message]
# 將工作區(qū)的更改直接提交到倉庫
$ git commit -a
# 提交前展示所有的變動
$ git commit -v
# 使用新提交代替上次提交
# 如果代碼沒有任何變動,將會用于重寫上次提交的提交信息
$ git commit --amend -m [message]
# 重做上次的提交,并將指定的文件包含其中
$ git commit --amend [file1] [file2] ...
5. 分支相關
# 列出本地分支
$ git branch
# 列出所有遠程分支
$ git branch -r
# 列出本地和遠程的所有分支
$ git branch -a
# 新建分支,并留在當前分支
$ git branch [branch-name]
# 新建分支,并切換到新分支
$ git checkout -b [branch]
# 指向某次提交新建分支
$ git branch [branch] [commit]
# 創(chuàng)建一個新分支,并與指定的遠程分支建立跟蹤關系
$ git branch --track [branch] [remote-branch]
# 切換到指定分支,并更新工作區(qū)
$ git checkout [branch-name]
# 切換到上一個分支
$ git checkout -
# 將本地分支與指定的遠程分支建立跟蹤關系
$ git branch --set-upstream [branch] [remote-branch]
# 合并指定分支與當前分支
$ git merge [branch]
# 將指定的提交合并到本地分支
$ git cherry-pick [commit]
# 刪除分支
$ git branch -d [branch-name]
# 刪除遠程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
6. 標簽操作
# 列出所有標簽
$ git tag
# 在當前提交上創(chuàng)建一個新標簽
$ git tag [tag]
# 在指定提交上創(chuàng)建一個新標簽
$ git tag [tag] [commit]
# 刪除本地標簽
$ git tag -d [tag]
# 刪除遠程標簽
$ git push origin :refs/tags/[tagName]
# 查看標簽信息
$ git show [tag]
# 提交指定標簽
$ git push [remote] [tag]
# 提交所有標簽
$ git push [remote] --tags
# 創(chuàng)建一個新分支,指向特定的標簽
$ git checkout -b [branch] [tag]
7.查看信息
# 顯示有變動的文件
$ git status
# 顯示當前分支的提交歷史
$ git log
# 顯示提交歷史和每次提交的文件
$ git log --stat
# 指定關鍵字搜索提交歷史
$ git log -S [keyword]
# 顯示自某次提交以來的所有更改,一次提交顯示一行。
$ git log [tag] HEAD --pretty=format:%s
# 顯示自某次提交以來的所有更改,其提交描述必須符合搜索條件。
$ git log [tag] HEAD --grep feature
# 顯示指定文件的提交歷史
$ git log --follow [file]
$ git whatchanged [file]
# 顯示與指定文件相關的每個差異
$ git log -p [file]
# 顯示最近 5 次提交
$ git log -5 --pretty --oneline
# 顯示所有的提交用戶,已提交數(shù)目多少排名
$ git shortlog -sn
# 顯示指定文件何時被何人修改過
$ git blame [file]
# 顯示暫存區(qū)和工作區(qū)的文件差別
$ git diff
# 顯示暫存區(qū)和上一次提交的差別
$ git diff --cached [file]
# 顯示工作區(qū)和當前分支的最近一次提交的差別
$ git diff HEAD
# 顯示指定兩次提交的差別
$ git diff [first-branch]...[second-branch]
# 顯示今天提交了多少代碼
$ git diff --shortstat "@{0 day ago}"
# 顯示特定提交的提交信息和更改的內(nèi)容
$ git show [commit]
# 新手某次提交改動了哪些文件
$ git show --name-only [commit]
# 顯示某個提交的特定文件的內(nèi)容
$ git show [commit]:[filename]
# 顯示當前分支的最新提交
$ git reflog
8. 遠程同步
# 從遠程分支下載所有變動
$ git fetch [remote]
# 顯示所有遠程倉庫
$ git remote -v
# 顯示某個遠程參考的信息
$ git remote show [remote]
# 新建一個遠程倉庫,并命名
$ git remote add [shortname] [url]
# 檢索遠程存儲庫的更改,并與本地分支合并
$ git pull [remote] [branch]
# 將本地分支提交到遠程倉庫
$ git push [remote] [branch]
# 將當前分支強制提交到遠程倉庫,即使有沖突存在
$ git push [remote] --force
# 將所有分支提交到遠程倉庫
$ git push [remote] --all
9. 撤銷操作
# 將暫存區(qū)中的指定文件還原到工作區(qū),保留文件變動
$ git checkout [file]
# 將指定文件從某個提交還原到暫存區(qū)和工作區(qū)
$ git checkout [commit] [file]
# 將暫存區(qū)中的所有文件還原到工作區(qū)
$ git checkout .
# 重置暫存區(qū)中的指定文件,與先前的提交保持一致,但保持工作空間的變動不變
$ git reset [file]
# 重置暫存區(qū)和工作區(qū)中的指定文件,并與最近一次提交保持一致,工作空間文件變動不會保留
$ git reset --hard
# 重置暫存區(qū),指向指定的某次提交,工作區(qū)的內(nèi)容不會被覆蓋
$ git reset [commit]
# 重置暫存區(qū)和工作區(qū)中的指定文件,并與指定的某次提交保持一致,工作區(qū)的內(nèi)容會被覆蓋
$ git reset --hard [commit]
# 將 HEAD 重置為指定的某次提交,保持暫存區(qū)和工作區(qū)的內(nèi)容不變
$ git reset --keep [commit]
# 新建新提交以撤消指定的提交
# All changes of the latter will be offset by the former and applied to the current branch.
$ git revert [commit]
# 暫存為提交的變動,并在稍后移動它們
$ git stash
$ git stash pop
10. 其他
# 生成用于發(fā)布的存檔
$ git archive
參考:
1、https://juejin.im/post/5adb1720f265da0b80704fb8
2、https://www.cnblogs.com/tsingke/p/7350490.html
3、https://www.tutorialdocs.com/article/git-basic-command-list.html

最近搜集到傳智播客 2018 最新 Python 和 Java 教程!關注本公眾號,后臺回復「2018」即可獲取下載地址。
公眾號提供CSDN資源免費下載服務!