??坦白說,Git目前已經是國內最常見的代碼管理工具之一;無論新手或老油條,都需要有一套自己的Git命令字典,方便隨時使用,本文基本上涵蓋了常用到的所有Git命令,足矣讓我們得心應手的在公司使用Git管理代碼,
??前車之鑒,后事之師,希望我的文章們能幫助你少走些彎路,打工人不易,加油!
??走,上車,正規車!

車票
- 一、Git簡介
- 二、Git與SVN的區別
- 三、Git基本流程
- 四、Git檔案狀態
- 五、用戶配置
- 六、單機使用簡單流程
- 七、Git命令記錄
- 1、新建本地倉庫
- 2、Git配置資訊
- 3、增加、洗掉檔案
- 4、代碼提交
- 5、操作分支(branch)
- 6、標簽Tag
- 7、查看資訊
- 8、遠程同步
- 9、撤銷操作
- 10、其他操作
- 11、.gitignore忽略配置(提交到git時,忽略部分檔案)
- 12、Git常用命令速查表
一、Git簡介
??Git是一款免費、開源的分布式版本控制系統,用于敏捷高效地處理任何或小或大的專案,
??Git與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務器端軟體支持,
??Git屬于分布式版本控制系統,每個人電腦上都有一個完整的版本庫,稱為本地倉庫,在本地就可以進行版本控制,另外在其他服務器上還有一個版本庫,稱為中央倉庫,中央倉庫的作用是進行版本交換,每個開發人員要保持代碼一致只需要和中央倉庫進行互動就可以了,
二、Git與SVN的區別
- Git不僅僅是個版本控制系統,它也是個內容管理系統(CMS),作業管理系統等,
- 如果你是一個具有使用SVN背景的人,你需要做一定的思想轉換,來適應Git提供的一些概念和特征,
具體區別點:
Git是分布式的,SVN不是:這是Git和其它非分布式的版本控制系統,例如SVN,CVS等,最核心的區別,- Git把內容按元資料方式存盤,而SVN是按檔案:所有的資源控制系統都是把檔案的元資訊隱藏在一個類似.svn,.cvs等的檔案夾里,
- Git分支和SVN的分支不同:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄,
Git沒有一個全域的版本號,而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個特征,- Git的內容完整性要優于SVN:Git的內容存盤使用的是SHA-1哈希演算法,這能確保代碼內容的完整性,確保在遇到磁盤故障和網路問題時降低對版本庫的破壞,
三、Git基本流程
??下圖是Git基本操作的流程圖,一般來說,日常使用只要記住下圖7個命令就可以了,當然,不能靠這幾個基礎語法就以為熟練使用了Git哦,下面整理了詳細的語法記錄,結合實際情況,祝你快速掌握Git,

四、Git檔案狀態

untracked:未跟蹤,表示檔案不受git管理,一般新建的檔案處于該狀態 Untracked filesstaged:已暫存,表示對以修改的檔案做了標記,使之包含在下次要提交的檔案串列中 Changes to be committedcommitted:已提交,表示檔案已經被提交到本地倉庫modified:已修改,表示檔案內容已被修改,但是沒有做標記 Changes not staged for commit
五、用戶配置
如果Git沒有獲取到用戶配置,則只能拉取代碼,不能修改,想使用git,需要告訴git是誰在使用;
如下,配置用戶名和郵箱
$ git config --global user.name "xxx"
$ git config --global user.email "xxxx@qq.com"
查看當前用戶名和郵箱
$ git config --global user.name # 獲取當前登錄的用戶
$ git config --global user.email # 獲取當前登錄用戶的郵箱
六、單機使用簡單流程
單人使用時,只有master,推送專案到遠程倉庫基本流程就沒必要這么麻煩,如下即可:
- 先手動在git系統端創建新的遠程倉庫
- git clone [HTTP URL]
克隆下來后是一個帶有.git的檔案夾,也就是本地倉庫 - git add .
添加該目錄下所有檔案到暫存區,也可以指定檔案名稱 - git commit -m “第一次提交”
添加檔案到本地倉庫并提交描述資訊 - git push -u origin master
把本地倉庫的檔案推送到遠程倉庫(-u 表示第一次推送master分支的所有內容,后面再推送就不需要-u了)
七、Git命令記錄
1、新建本地倉庫
| 命令 | 功能介紹 |
|---|---|
git init | 在當前目錄新建一個Git代碼庫; 該命令將在該專案目錄下創建一個.git的子目錄,包含該Git倉庫中所有的必須檔案, |
| git init [project-name] | 新建一個目錄,將其初始化為Git代碼庫 |
git clone [url] | 下載一個專案和它的整個代碼歷史 |
2、Git配置資訊
| 命令 | 功能介紹 |
|---|---|
git --version | 查看git的版本資訊 |
git config --list git config -l | 顯示Git當前配置資訊,點擊“q”鍵退出查看 |
git config -e | 編輯Git本地配置 |
| git config -e --global | 編輯Git全域配置 |
Git配置決議
user.email=chenhh@xxx.com
user.name=chenhh
core.ignorecase=false # 不許忽略檔案名大小寫
core.autocrlf=input # 換行模式為 input,即提交時轉換為LF,檢出時不轉換
core.filemode=false # 不檢查檔案權限
core.safecrlf=true # 拒絕提交包含混合換行符的檔案
core.editor=vim
core.repositoryformatversion=0 # Internal variable identifying the repository format and layout version
core.bare=false # 默認不創建裸倉庫
core.logallrefupdates=true # log 所有 ref 的更新
core.precomposeunicode=true # Mac專用選項,開啟以便檔案名兼容其他系統
push.default=simple # 只推送本地當前分支,且與上游分支名字一致
alias.lg=log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
pull.rebase=true # 強制開啟 rebase 模式
credential.helper store # 記住密碼
3、增加、洗掉檔案
| 命令 | 功能介紹 |
|---|---|
git add . | 添加當前目錄的所有檔案到暫存區 |
| git add [file1][file2] … | 添加指定檔案到暫存區 |
| git add [dir] | 添加指定目錄到暫存區,包括子目錄 |
| git add -p | 對于同一個檔案的多處變化,可以實作分次提交 |
git rm [file1] [file2] ... | 洗掉作業區檔案,并且將這次洗掉放入暫存區 |
| git rm --cached [file] | 隱藏指定檔案,使Git停止追蹤,但該檔案會保留在作業區 |
| git mv [file-original] [file-renamed] | 改名檔案,并且將這個改名放入暫存區 |
4、代碼提交
| 命令 | 功能介紹 |
|---|---|
git commit -m [message] | 提交暫存區到倉庫區,git commit -m “first commit” |
| git commit [file1] [file2] … -m [message] | 提交暫存區的指定檔案到倉庫區 |
| git commit -a | 提交作業區自上次commit之后的變化,直接到倉庫區 |
git commit -v | 提交時顯示所有diff資訊 |
| git commit --amend -m [message] | 使用一次新的commit,替代上一次提交; 如果代碼沒有任何新變化,則用來改寫上一次commit的提交資訊 |
| git commit --amend [file1] [file2] … | 重做上一次commit,并包括指定檔案的新變化 |
5、操作分支(branch)
| 命令 | 功能介紹 |
|---|---|
git branch | 列出所有本地分支 |
git branch -r | 列出所有遠程分支 |
git branch -a | 列出所有本地分支和遠程分支 |
| git branch [branch-name] | 新建一個分支,但依然停留在當前分支 |
git checkout -b [branch] | 新建一個分支,并切換到該分支 |
| git branch [branch] [commit] | 新建一個分支,指向指定commit |
| git branch --track [branch] [remote-branch] | 新建一個分支,與指定的遠程分支建立追蹤關系 |
git checkout [branch-name] | 切換到指定分支,并更新作業區 |
| git checkout - | 切換到上一個分支 |
| git branch --set-upstream [branch] [remote-branch] | 建立追蹤關系,在現有分支與指定的遠程分支之間 |
git merge [branch] | 合并指定分支到當前分支;例:如果當前是master分支,需要合并dev分支:git merge dev |
| git cherry-pick [commit] | 選擇一個commit,合并進當前分支 |
| git branch -m test dev | 將test分支名字改為dev |
| git branch -d [branch-name] | 洗掉名字為[branch-name]的分支;例如:git branch -D dev |
| git branch -D [branch-name] | 強制洗掉名字為[branch-name]的分支;例如:git branch -D dev |
git push origin --delete [remote-branchname] | 洗掉遠程分支 |
6、標簽Tag
| 命令 | 功能介紹 |
|---|---|
git tag | 列出所有tag |
| git tag [tag] | 新建一個tag在 當前 commit |
| git tag [tag] [commit] | 新建一個tag在 指定 commit |
| git tag -d [tag] | 洗掉本地tag |
| git push origin :refs/tags/[tagName] | 洗掉遠程tag |
| git show [tag] | 查看tag資訊 |
| git push [remote] [tag] | 提交指定tag |
| git push [remote] --tags | 提交所有tag |
| git checkout -b [branch] [tag] | 新建一個分支,指向某個tag |
7、查看資訊
| 命令 | 功能介紹 |
|---|---|
git status | ??git status命令的作用是顯示倉庫檔案狀態,紅色表示作業目錄的檔案被修改但還沒有提交到暫存區,綠色表示已經提交到暫存區,以極簡的方式顯示檔案狀態(下面是顯示內容決議):git status -s A:本地新增的檔案(服務器上沒有) C:檔案的一個新拷貝 D:本地洗掉的檔案(服務器上還在) M:紅色為修改過未被添加進暫存區的,綠色為已經添加進暫存區的 R:檔案名被修改 T:檔案的型別被修改 U:檔案沒有被合并(你需要完成合并才能進行提交) X:未知狀態(很可能是遇到git的bug了,你可以向git提交bug report) ?:未被git進行管理,可以使用git add fileName把檔案添加進來進行管理 |
ls -al | 查看詳細目錄資訊 |
| git log | 顯示當前分支的版本歷史 |
| git log --stat | 顯示commit歷史,以及每次commit發生變更的檔案 |
| git log -S [keyword] | 搜索提交歷史,根據關鍵詞 |
| git log [tag] HEAD --pretty=format:%s | 顯示某個commit之后的所有變動,每個commit占據一行 |
| git log [tag] HEAD --grep feature | 顯示某個commit之后的所有變動,其"提交說明"必須符合搜索條件 |
| 1.git log --follow [file] 2.git whatchanged [file] | 顯示某個檔案的版本歷史,包括檔案改名 |
| git log -p [file] | 顯示指定檔案相關的每一次diff |
| git log -5 --pretty --oneline | 顯示過去5次提交 |
| git log --before=“yyyy-MM-dd” | 顯示某個日期之前的記錄,如git log --before=“2020-01-01”(包含2020年1月1號的記錄) |
| git log --after=“yyyy-MM-dd” | 顯示某個日期之后的記錄,如git log --after=“2020-01-01”(包含2020年1月1號的記錄) |
| git log --author=“name” | 查看某個人的提交記錄 |
| git log -n | 顯示前n條記錄 |
| git shortlog -sn | 顯示所有提交過的用戶,按提交次數排序 |
| git blame [file] | 顯示指定檔案是什么人在什么時間修改過 |
| git diff | 顯示暫存區和作業區的差異 |
| git diff --cached [file] | 顯示暫存區和上一個commit的差異 |
| git diff HEAD | 顯示作業區與當前分支最新commit之間的差異 |
| git diff [first-branch]…[second-branch] | 顯示兩次提交之間的差異 |
| git diff --shortstat “@{0 day ago}” | 顯示今天你寫了多少行代碼 |
| git show [commit] | 顯示某次提交的元資料和內容變化 |
| git show --name-only [commit] | 顯示某次提交發生變化的檔案 |
| git show [commit]:[filename] | 顯示某次提交時,某個檔案的內容 |
| git reflog | 顯示當前分支的最近幾次提交 |
8、遠程同步
| 命令 | 功能介紹 |
|---|---|
git fetch [remote] | 下載遠程倉庫的所有變動 |
| git remote -v | 顯示所有遠程倉庫 |
| git remote show [remote] | 顯示某個遠程倉庫的資訊 |
| git remote add [shortname] [url] | 增加一個新的遠程倉庫,并命名 |
git pull | 從遠端庫更新內容到本地(相當于svn的update) |
| git pull [remote] [branch] | 取回遠程倉庫的變化,并與本地分支合并 |
git push [remote] [branch] | 上傳本地指定分支到遠程倉庫,如:git push origin master(同步到遠程master倉庫) |
| git push [remote] --force | 強行推送當前分支到遠程倉庫,即使有沖突 |
| git push [remote] --all | 推送所有分支到遠程倉庫 |
| git push origin --delete [branch] | 洗掉遠程[branch]分支;例如:git push origin --delete dev |
9、撤銷操作
| 命令 | 功能介紹 |
|---|---|
git checkout [file] | 恢復暫存區的指定檔案到作業區 |
| git checkout [commit] [file] | 恢復某個commit的指定檔案到暫存區和作業區 |
git checkout . | 恢復暫存區的所有檔案到作業區 |
| git reset [file] | 重置暫存區的指定檔案,與上一次commit保持一致,但作業區不變 |
| git reset --hard HEAD^ | 回退到上一個版本(HEAD代表當前版本,有一個^代表上一個版本,以此類推) |
| git reset --hard d7b5 | 回退到指定版本(其中d7b5是想回退的指定版本號的前幾位) |
| git reset [commit] | 重置當前分支的指標為指定commit,同時重置暫存區,但作業區不變 |
| git reset --hard [commit] | 重置當前分支的HEAD為指定commit,同時重置暫存區和作業區,與指定commit一致 |
| git reset --keep [commit] | 重置當前HEAD為指定commit,但保持暫存區和作業區不變 |
| git revert [commit] | 新建一個commit,用來撤銷指定commit,后者的所有變化都將被前者抵消,并且應用到當前分支 |
| git stash | 保存當前進度;git stash命令的作用主要如果當前分支所做的修改你還不想提交,但又需要切換到其他分支去查看,就可以使用git stash保存當前的修改, |
| git stash list | 看已經保存的歷史記錄 |
| git stash pop <歷史進度id> | 重新應用某個已經保存的進度,并且洗掉進度記錄 |
| git stash apply <歷史進度id> | 重新應用某個已經保存的進度,但不洗掉進度記錄,如果直接使用git stash默認是使用最近的保存 |
| git stash drop <歷史進度id> | 洗掉某個歷史進度 |
| git stash clear | 洗掉所有的歷史進度 |
10、其他操作
| 命令 | 功能介紹 |
|---|---|
| git grep “陳哈哈” | 從當前目錄的所有檔案中查找文本內容 |
| git grep “陳哈哈” v2.5 | 在某一版本中搜索文本 |
11、.gitignore忽略配置(提交到git時,忽略部分檔案)
在根目錄下創建.gitignore檔案,添加下方內容代表忽略該檔案或該檔案夾下檔案不被Git追蹤,即不會提交,
注意:新加.gitignore只能忽略那些原來沒有被提交過的檔案,如果某些檔案已經被納入了版本管理中,則修改.gitignore是無效的,
target/
.settings/
.idea/
.mvn/
*.classpath
*.options
*.project
12、Git常用命令速查表

如有問題請在評論區留言呦,我會及時糾正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/276229.html
標籤:其他
