git命令大全

一、基本的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)
image.png
  • 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常用命令

image.png
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ō)明:

image.png

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容