學(xué)習(xí)git命令行之前先來了解git的區(qū)域劃分已經(jīng)git文件的狀態(tài)劃分
git區(qū)域分為工作區(qū)、暫存區(qū),本地倉庫,遠(yuǎn)程倉庫

image.png
- Workspace:工作區(qū)
- Index / Stage:暫存區(qū)
- Repository:本地倉庫
- Remote:遠(yuǎn)程倉庫
一個(gè)文件的git狀態(tài)(通過git status可以查看)可以分為:
- Untracked files:未跟蹤狀態(tài),即新建的文件還未進(jìn)行add操作,在工作區(qū)
- Changes not staged for commit:已有的文件,修改了但未暫存,即未進(jìn)行add操作,在工作區(qū)
- Changes to be committed:等待提交的文件,也可以說是staged狀態(tài),已a(bǔ)dd但未commit,等待提交的文件,在暫存區(qū)
受版本控制并且已修改的 modified 狀態(tài)
從暫存區(qū)已經(jīng)提交到本地倉庫的 committed 狀態(tài)
文件操作
在工作區(qū)(workspace)的文件可進(jìn)行的操作
- git add [file1] [file2] [dir]... :將指定文件或指定目錄(目錄下所有修改)從工作區(qū)添加到暫存區(qū)(可以是 新建、編輯和刪除的文件)
- git add . :將工作區(qū)中所有文件變更添加到暫存區(qū)
- git rm [file1] [file2] ...:刪除文件并將刪除放入暫存區(qū)
- git commit -a:提交工作區(qū)自上次commit之后的變化,直接到本地倉庫
- git checkout [file]:將文件從工作區(qū)撤回,即撤銷更改
在暫存區(qū)(Index/Staged)的文件可進(jìn)行的操作
- git restore --staged [file1] [dir] ... :撤銷文件或者目錄下的文件的add操作,恢復(fù)到工作區(qū)(Git 2.23 版本之后新加)
- git commit -m [message]:將暫存區(qū)所有文件提交到本地倉庫
- git commit [file1] [file2] ... -m [message]:將指定文件從暫存區(qū)提交到本地倉庫
在本地倉庫(Repository)的文件可進(jìn)行的操作
- git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
如果本地分支名與遠(yuǎn)程分支名相同,則可以省略為:git push <遠(yuǎn)程主機(jī)名> <本地分支名>
如果當(dāng)前分支只有一個(gè)遠(yuǎn)程分支,那么主機(jī)名都可以省略,形如 git push <本地分支名> - git reset HEAD file_name:拉取最近一次提交到本地倉庫的文件到暫存區(qū),并且該操作不影響工作區(qū)
git reset 通過把分支記錄回退幾個(gè)提交記錄來實(shí)現(xiàn)撤銷改動(dòng)
在遠(yuǎn)程倉庫(Repository)的文件可進(jìn)行的操作
- git pull [remote] [branch]: 取回遠(yuǎn)程倉庫的變化,并與本地分支合并
- git fetch [remote]: 下載遠(yuǎn)程倉庫的所有變動(dòng)
配置
- git config --list 列出所有 Git 當(dāng)時(shí)能找到的配置
- git config --list --show-origin:查看所有的配置以及它們所在的文件
- git config --global user.name "[name]" 設(shè)置姓名
- git config --global user.email "[email]" 設(shè)置郵箱
如果使用了 --global 選項(xiàng),那么該命令只需要運(yùn)行一次,因?yàn)橹鬅o論你在該系統(tǒng)上做任何事情, Git 都會(huì)使用那些信息。 當(dāng)你想針對(duì)特定項(xiàng)目使用不同的用戶名稱與郵件地址時(shí),可以在那個(gè)項(xiàng)目目錄下運(yùn)行沒有 --global 選項(xiàng)的命令來配置
獲取幫助
- git help <verb> :獲取幫助,全面手冊(cè)
- git <verb> -h:獲取幫助,可選項(xiàng)的快速參考
如 git help config/git config -h:獲取git config命令的手冊(cè);git add -h 。。。。
新建代碼庫
- git init: 當(dāng)前目錄新建一個(gè)git代碼塊
- git init [project-name]:新建一個(gè)目錄并初始化為git庫
- git clone [url]: 下載一個(gè)項(xiàng)目和整個(gè)代碼歷史
分支操作
- git brance:查看本地所有分支
- git branch -r:查看所有遠(yuǎn)程分支
- git branch -a:查看所有本地和遠(yuǎn)程分支
- git branch -d [branch-name]:刪除本地分支
- git push origin --delete [branch-name]:刪除遠(yuǎn)程分支(除了 git push,其他常用命令不會(huì)對(duì)遠(yuǎn)程倉庫造成影響)
- git branch [branch-name]:新建一個(gè)分支,但仍然留在當(dāng)前分支
- git branch --track [branch] [remote-branch]:新建一個(gè)分支,與指定的遠(yuǎn)程分支建立追蹤關(guān)系
- git checkout -b [branch-name]:新建一個(gè)分支并切換到該分支
- git checkout [branch-name]:切換到指定分支,并更新工作區(qū)
- git checkout -:切換到上一個(gè)分支
- git merge [branch]:合并指定分支到當(dāng)前分支
堆棧區(qū)操作(隱藏操作)
- git stash:將當(dāng)前的工作區(qū)內(nèi)容保存到git棧隱藏起來
git stash save [message]:添加備注,方便查找 - git stash list: 查看stash存儲(chǔ)列表
- git stash show stash@{num}:顯示第{num+1}個(gè)存儲(chǔ)做了哪些更改
若直接輸入git stash show,顯示的是第一個(gè),num從0開始 - git stash apply stash@{num}:將堆棧中第num+1個(gè)對(duì)應(yīng)的stash彈出,但不會(huì)刪除該存儲(chǔ)
省略stash@{num}默認(rèn)操作的就是第一個(gè) - git stash pop stash@{num}:將緩存堆棧中的對(duì)應(yīng)stash應(yīng)用到當(dāng)前的工作目錄下并從stash列表里刪除該stash
省略stash@{num}默認(rèn)操作的就是第一個(gè) - git stash drop stash@{num}:丟棄stash@{$num}存儲(chǔ),從列表中刪除這個(gè)存儲(chǔ)
省略stash@{num}默認(rèn)操作的就是第一個(gè) - git stash clear:刪除所有的stash
查看操作
- git status: 顯示有變更的文件狀態(tài)
- git log:顯示當(dāng)前分支的commit歷史
- git log --stat:顯示commit歷史,以及每次commit發(fā)生變更的文件
- git log -S [keyword]:根據(jù)關(guān)鍵字搜索commit歷史
- git diff: 顯示工作區(qū)和暫存區(qū)的差異