一、基本的linux命令
cd 進(jìn)入某個(gè)目錄
pwd 顯示當(dāng)前目錄路徑
ls(ll) 列出當(dāng)前目錄的文件 ll就是ls -l,列出詳細(xì)信息
touch 新建一個(gè)文件
rm 刪除要給文件,加上-rf,就是強(qiáng)制刪除目錄
mkdir 新建一個(gè)目錄
mv 移動(dòng)文件,或者是更改文件名稱(chēng),mv index.html ./aa,這就是將index.html移動(dòng)到./aa目錄下。mv index.html ./aa/bb.html,這是就是將index.html移動(dòng)到./aa目錄下并改名為bb.html
reset 重新初始化終端/清屏
clear 清屏
history 查看命令歷史
help 幫助
# 代表注釋
cat 顯示文件內(nèi)容
二、git配置
git config -l 查看當(dāng)前git環(huán)境詳細(xì)配置
2.1、查看系統(tǒng)config
git config --system --list
配置文件在git安裝目錄/etc/gitconfig
2.2、查看當(dāng)前用戶(hù)配置
git config --global --list
配置文件在~/.gitconfig
2.3、查看當(dāng)前倉(cāng)庫(kù)配置信息
git config --local --list
配置文件在當(dāng)前項(xiàng)目的/.git/config
2.4、修改git配置
git config [--local][--global][--system] section.key value
git config --local user.name huhuhu 設(shè)置當(dāng)前項(xiàng)目的用戶(hù)名
git config --global core.quotepath false 配置當(dāng)前用戶(hù)的編碼項(xiàng),可以解決中文編碼問(wèn)題
git config --local core.ignorecase false 配置當(dāng)前項(xiàng)目不忽略文件大小寫(xiě),git默認(rèn)忽略文件名的大小寫(xiě),這點(diǎn)值得注意
三、git基本知識(shí)
使用遠(yuǎn)程倉(cāng)庫(kù)時(shí)候會(huì)有多個(gè)協(xié)議可以選擇,使用https不僅僅速度慢,而且每次push都要輸入口令。
3.1、git關(guān)鍵字解釋
HEAD 當(dāng)前版本的指針,當(dāng)切換本地版本的時(shí)候會(huì)快速指向指定版本文件
master git為我們創(chuàng)建主分支
origin 遠(yuǎn)程倉(cāng)庫(kù)的名稱(chēng)
3.2、git文件的四種狀態(tài)

- Untracked: 未跟蹤, 此文件在文件夾中, 但并沒(méi)有加入到git庫(kù), 不參與版本控制. 通過(guò)git add 狀態(tài)變?yōu)镾taged.
- Unmodify: 文件已經(jīng)入庫(kù), 未修改, 即版本庫(kù)中的文件快照內(nèi)容與文件夾中完全一致. 這種類(lèi)型的文件有兩種去處, 如果它被修改, 而變?yōu)镸odified. 如果使用git rm移出版本庫(kù), 則成為Untracked文件
- Modified: 文件已修改, 僅僅是修改, 并沒(méi)有進(jìn)行其他的操作. 這個(gè)文件也有兩個(gè)去處, 通過(guò)git add可進(jìn)入暫存staged狀態(tài), 使用git checkout 則丟棄修改過(guò), 返回到unmodify狀態(tài), 這個(gè)git checkout即從庫(kù)中取出文件, 覆蓋當(dāng)前修改
- Staged: 暫存狀態(tài). 執(zhí)行g(shù)it commit則將修改同步到庫(kù)中, 這時(shí)庫(kù)中的文件和本地文件又變?yōu)橐恢? 文件為Unmodify狀態(tài). 執(zhí)行g(shù)it reset HEAD filename取消暫存, 文件狀態(tài)為Modified
四、git常用命令

4.1、init && clone
git init 在當(dāng)前目錄新建一個(gè)倉(cāng)庫(kù)
git init [project-name] 在一個(gè)目錄下新建本地倉(cāng)庫(kù)
git clone [url]克隆一個(gè)遠(yuǎn)程倉(cāng)庫(kù)
4.2、diff
git diff HEAD -- . 查看最新本地版本庫(kù)和工作區(qū)所有文件的區(qū)別
git diff HEAD -- [file-name] 查看最新本地版本庫(kù)和工作區(qū)文件的卻別
git diff HEAD^ -- [file-name] 查看本地上一個(gè)版本和工作區(qū)文件的卻別
git diff [local branch] origin/[remote branch] 比較本地分支和遠(yuǎn)程分支的區(qū)別
4.3、status
git status [file-name] 查看指定文件狀態(tài)
git status 查看所有文件狀態(tài)
4.4、add
git add [file-name1] [file-name2] ... 從工作區(qū)添加指定文件到暫存區(qū)
git add . 將工作區(qū)的被修改的文件和新增的文件提交到暫存區(qū),不包括被刪除的文件
git add -u .u指update,將工作區(qū)的被修改的文件和被刪除的文件提交到暫存區(qū),不包括新增的文件
git add -A .A指all,將工作區(qū)被修改、被刪除、新增的文件都提交到暫存區(qū)
4.5、commit
git commit -m [massage]將暫存區(qū)所有文件添加到本地倉(cāng)庫(kù)
git commit [file-name-1] [file-name-2] -m [massage] 將暫存區(qū)指定文件添加到本地倉(cāng)庫(kù)
git commit -am [massage]將工作區(qū)的內(nèi)容直接加入本地倉(cāng)庫(kù)
git commit --amend快速將當(dāng)前文件修改合并到最新的commit,不會(huì)產(chǎn)生新的commit。在提交commit后發(fā)現(xiàn)還有部分文件修改忘記提交了可以是用該命令
加-m是指直接在后面寫(xiě)上版本的注釋?zhuān)患?code>-m的話會(huì)用一個(gè)vim打開(kāi)文件讓你寫(xiě)入massage,有未追蹤的文件將會(huì)失敗,需要add加入暫存區(qū)。
4.6、clean
git clean -df 加-d是指包含目錄,加-f是指強(qiáng)制,刪除所有未跟蹤的文件
4.7、log
git log 顯示所有commit日志
git log --pretty=oneline 將日志縮寫(xiě)為單行顯示
git log --graph --pretty=oneline --abbrev-commit 查看分支合并情況
git log --oneline --decorate --graph --all 查看分叉歷史,包括:提交歷史、各個(gè)分支的指向以及項(xiàng)目的分支分叉情況。
git log -3 查看最新3條commit日志數(shù)據(jù)
4.8、reflog
git reflog 顯示操作本地版本庫(kù)的命令,包括commit和reset等,在回退版本以后又后悔找不到commit id了可以使用此命令查看歷史
4.9、push
git push 將文件添加到遠(yuǎn)程倉(cāng)庫(kù)
git push -f 強(qiáng)制提交,當(dāng)我們本地reset到舊的版本時(shí),然后普通push會(huì)被攔截,因?yàn)榇耸潜镜豀EAD指向比遠(yuǎn)程庫(kù)還要舊
git push origin [branch-name] 推送當(dāng)前本地分支到指定遠(yuǎn)程分支
4.10、rm
git rm --cached [file-name] 刪除暫存區(qū)的文件
git rm -rf . 不但刪除所有暫存區(qū)的文件,還刪除所有工作區(qū)的物理文件
4.11、checkout
git checkout -- [file-name]
最好加--,沒(méi)有的話就把它當(dāng)作切換分支看待,切換到另一個(gè)分支了,如果沒(méi)有這個(gè)分支也會(huì)把它當(dāng)作文件執(zhí)行。
用暫存區(qū)的文件覆蓋掉工作區(qū)的文件
如果暫存區(qū)沒(méi)有可更新的就會(huì)用commit的文件更新工作區(qū)的文件
git checkout [branch] 切換分支
git checkout -b [new-branch-name] 創(chuàng)建并切換分支
4.12、reset
當(dāng)對(duì)整個(gè)版本進(jìn)行操作
git reset --{soft|(mixed)|hard} HEAD
-
--soft其中可選參數(shù)soft表示單純的切換HEAD指向的commit-id
*--mixed 默認(rèn)值mixed參數(shù)表示先執(zhí)行上面一步,然后再將commit-id里面的內(nèi)容更新到暫存區(qū)
-
--hard hard表示先執(zhí)行上面兩步,然后再將暫存區(qū)內(nèi)容同步到工作區(qū)
git reset --hard HEAD^^ 用上兩個(gè)版本里的所有文件撤回到暫工作區(qū)
git reset --hard [commit id] 用指定版本的所有文件撤回到工作區(qū)
當(dāng)對(duì)當(dāng)個(gè)文件進(jìn)行操作
git reset HEAD [file-name]
對(duì)單個(gè)文件操作時(shí)候只能用mixed參數(shù),而且還是可省略
對(duì)單個(gè)文件操作時(shí)候HEAD指向不會(huì)變
將commit中指定的文件同步到暫存區(qū)中
git reset [commit-id] [file-name] 將指定commit-id中的文件替換掉暫存區(qū)的文件
切換分支的比較
git reset [branch] 切換分支,但這里的切換分支和上面的git checkout [branch]切換分支不同,下圖說(shuō)明:

4.13、revert
git revert -n [commit-id]
git revert -n HEAD^^
撤回版本的比較
-
reset 切換版本是會(huì)刪除丟棄最新的版本的,HEAD會(huì)直接跳到指定版本,但是還是可以通過(guò)reflog找回。
image.png -
revert 會(huì)將指定的bug版本視為bug版,會(huì)將當(dāng)前版本中的bug版的代碼刪除,生成新的commit覆蓋掉當(dāng)前commit,但是commit-id是不會(huì)變的。
image.png
4.14、branch
git branch [branch-name] 創(chuàng)建分支
git branch 查看當(dāng)前分支
git branch -a 查看本地和遠(yuǎn)程的所有分支
git branch -r 查看遠(yuǎn)程所有分支
git branch -d [branch-name] 刪除一個(gè)分支
git branch -D [branch-name] 強(qiáng)制刪除一個(gè)沒(méi)有合并的分支
git branch --set-upstream-to=origin/[branch-name] [branch-name] 把本地分支和遠(yuǎn)程分支進(jìn)行連接
4.15、merge
git merge 合并本地origin/[branch-name]和HEAD->[branch-name] 的代碼,并同步到工作空間
git merge [branch-name] 用于合并指定分支到當(dāng)前分支
git merge --quit 退出當(dāng)前分支合并,當(dāng)合并后沖突很多,要撤回合并分支就可以用這個(gè)命令
git merge --no-ff -m [massage] [branch-name] 不使用Fast forward合并分支,這樣會(huì)創(chuàng)建新的commit,所以需要massage。這樣被合并的分支HEAD指向是會(huì)變的。
如果使用了Fast forward方式合并分支,那么刪除次要分支的時(shí)候歷史分支記錄也會(huì)被刪除,這樣就無(wú)法追尋分支合拼信息了。
4.16、switch
git switch -c [branch-name] 創(chuàng)建新分支并切換到該分支
git switch [branch-name] 切換到已有分支
4.17、stash
git stash 隱藏當(dāng)前工作的修改
如果不隱藏自己修改的半成品代碼,就會(huì)發(fā)生切換到別的分支后,將然后自己的半成品代碼帶入其他分支,這樣就發(fā)生很多不必要的麻煩。
git stash save message 執(zhí)行存儲(chǔ)時(shí),添加備注,方便查找,只有g(shù)it stash 也要可以的,但查找時(shí)不方便識(shí)別。
git stash list 查看隱藏的工作信息列表
git stash drop 刪除隱藏的工作信息
git stash pop 恢復(fù)隱藏的工作信息,同時(shí)刪除隱藏的工作信息
git stash apply [stash@{0}] 恢復(fù)指定的隱藏工作信息,但是不會(huì)刪除隱藏的工作信息
4.18、cherry-pick
git cherry-pick [commit-id]這個(gè)是復(fù)制一次commit提交,然后在當(dāng)前分支上重新提交一遍;也就是將指定commit的合并到當(dāng)前分支;
這種適用于在其他分支上修復(fù)了bug,但是這個(gè)bug在當(dāng)前分支上依然存在,所以可以復(fù)制這個(gè)commit的過(guò)程,不必重寫(xiě)代碼。
4.19、remote
git remote add origin 遠(yuǎn)程地址 關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)
git remote查看本地添加了哪些遠(yuǎn)程分支地址
git remote -v 查看本地添加了哪些遠(yuǎn)程分支地址更詳細(xì)信息
git remote remove origin 刪除本地指定的遠(yuǎn)程地址
4.20、fetch
git fetch 拉取遠(yuǎn)程分支最新的commit到本地倉(cāng)庫(kù)的origin/[branch-name]
4.21、pull
git pull 從遠(yuǎn)程倉(cāng)庫(kù)拉取代碼到工作空間
pull 和 fetch的關(guān)系
-
git pull==git fetch+git merge
4.22、tag
git tag 查看所有標(biāo)簽
git tag [version] 給當(dāng)前最新的commit打上標(biāo)簽
git tag [version] [commit-id] 給指定的commit-id打上標(biāo)簽
git tag -a [version] -m [massage] [commit-id]給指定的commit-id打上標(biāo)簽并附上說(shuō)明文字
git tag -d [version] 刪除標(biāo)簽
4.23、show
git show [tag-name]查看標(biāo)簽的詳細(xì)信息
4.24、rebase
git rebase -i HEAD~2 合并前兩個(gè)歷史提交,會(huì)彈出vim修改信息,修改第二行的pick為s,或者為squash,squash為合并的意識(shí),然后保存退出編輯,會(huì)打開(kāi)第二個(gè)vim編輯,合并并修改commit內(nèi)容,保存退出會(huì)產(chǎn)生一個(gè)新的commit id,這樣就合并了兩個(gè)commit

