2019-08-29 11:45:03 6120瀏覽
git現(xiàn)在的火爆程度非同一般,它被廣泛地用在大型開(kāi)源項(xiàng)目,團(tuán)隊(duì)開(kāi)發(fā),以及獨(dú)立開(kāi)發(fā)者,甚至學(xué)生之中。本篇這篇文章扣丁學(xué)堂Linux培訓(xùn)小編給大家分享了一些你必須要熟練掌握的git命令,文中通過(guò)示例代碼介紹的非常詳細(xì),需感興趣的小伙伴就隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
一些基本的操作
#全局配置 git config --global user.name "your username" git config --global user.email youremail@email.com git config --global color.ui true # mkdir git_proj & cd git_proj git init echo "# readme.md" >> README.md git add README.md git commit -m "readme commit" # 添加遠(yuǎn)程倉(cāng)庫(kù) 并給它取個(gè)別名 origin git remote add origin git@github.com:username/repositoryName.git # 將本地倉(cāng)庫(kù)推送至 origin 的 master 分支并與此分支關(guān)聯(lián)(-u 的作用,后期不必在使用) git push -u origin master # 從遠(yuǎn)程倉(cāng)庫(kù) origin 的 master 分支獲取最新源碼并下載到 tmp 分支 git fetch origin master:tmp # 比對(duì) tmp 分支于 master 分支做了哪些改動(dòng) git diff master tmp # 合并 tmp 分支到 master 分支 git merge tmp # clone copy 一個(gè)完整的遠(yuǎn)端倉(cāng)庫(kù)到本地 git clone git@github.com:username/repositoryName.git # pull 獲取 origin 的 master 分支并直接和當(dāng)前分支合并 # 所以可能會(huì)發(fā)生沖突 git pull origin master
checkout
checkout 命令有兩個(gè)主要作用:切換分支 和 回滾文件到當(dāng)前的 stage 版本 或 repository 版本
1、切換分支
# 切換到 new_branch 分支 git checkout new_branch # 創(chuàng)建并切換到 new_branch 分支 git checkout -b new_branch
2、回滾工作區(qū)的文件到最新 stage 版本 或 repository 版本,即從 stage 或 repository 中檢出最新版本
# -- 是文件標(biāo)示符 表名后面的參數(shù)為文件 避免產(chǎn)生切換 branch 的歧義 git checkout -- <filename>
回滾時(shí)會(huì)先檢查 stage 中是否有對(duì)應(yīng)的文件,如果沒(méi)有才會(huì)使用 repository 中最新的版本。而當(dāng)對(duì)某文件進(jìn)行了多次修改和 add 操作后,使用 checkout 我們只能將文件回滾到最新一次的 add 的版本。
但在某些場(chǎng)景下我們可能想回滾到 repository 中的最新版本,怎么做呢?配合 reset 命令的可以很容易做到。
先給出命令:
git reset HEAD <filename> & git checkout -- <filename>
這樣就可以將工作區(qū)的 filename 回滾到 repository 中的最新版本了。具體原理我們將在實(shí)例中詳細(xì)的講解。
reset
git 的 reset 命令比較繞,需要耐心的理解。簡(jiǎn)單來(lái)說(shuō),reset 有三種重置級(jí)別,我們需要準(zhǔn)確理解每個(gè)級(jí)別的作用。
soft:回退版本號(hào)。作用于 repository
mixed:回退版本號(hào),重置 stage。作用于 repository 和 stage
hard :回退版本號(hào),重置 stage,重置工作區(qū)源碼。作用于 repository,stage 和 workspace
我們簡(jiǎn)單展示下 repository 的版本號(hào),我們以此為 demo 分別嘗試三個(gè)級(jí)別的 reset
git log version D (HEAD) <-- HEAD指針 version C (HEAD^) version B (HEAD^^) version A (HEAD~3)
命令格式:
git reset [--soft|--mixed|--hard] version_no <filename>
--soft:只是單純的移動(dòng) repository 的 HEAD指針 到制定版本號(hào)。stage 和工作區(qū)沒(méi)有任何變化。
# 將 HEAD 指針回滾至上一版本 使用 git log 你會(huì)發(fā)現(xiàn)提交日志退回到了上一版本號(hào) git reset --soft HEAD^ #版本號(hào)現(xiàn)狀 version C <-- HEAD指針 version B version A
--mixed:默認(rèn)選項(xiàng),移動(dòng) repository 的 HEAD指針 到指定版本號(hào),同時(shí)用此版本重置 stage 區(qū),所以可能會(huì)讓工作區(qū)的某些文件處于 unstage 狀態(tài)(當(dāng)工作區(qū)的文件與 repository 中的版本不一致時(shí))。注意,這里是可以指定文件的。soft 本身和文件無(wú)關(guān),hard 則是不能單獨(dú)指定文件,只能全部重置。
# HEAD指針 還是指向 HEAD git reset HEAD^2 <filename> #版本號(hào)現(xiàn)狀 version B <-- HEAD指針 version A
HEAD指針 指向 version B,并且 stage 已經(jīng)被 version B 的文件重置,工作區(qū)則不受影響。
這里有個(gè)很實(shí)用的小技巧:
git reset version_no <filename> & git checkout -- <filename>
這兩個(gè)命令組合在一起可以讓工作區(qū)的指定文件回滾到 repository 中對(duì)應(yīng)的 version_no 版本。
如果 version_no 是 HEAD 的話那就可以回滾文件到最新一次的提交。
--hard:謹(jǐn)慎使用?。。∫苿?dòng) repository 的 HEAD指針 到指定版本號(hào),同時(shí)用此版本重置 stage 區(qū) 和 工作區(qū)源碼。這里要特別注意,工作區(qū)的源碼也會(huì)被覆蓋重置掉,你的修改會(huì)全部丟失。簡(jiǎn)單來(lái)說(shuō)就是將代碼徹底恢復(fù)到指定版本。hard 是沒(méi)辦法指定文件的,要么回滾,要么全回滾。
# HEAD指針 還是指向 HEAD git reset --hard HEAD^3 #版本號(hào)現(xiàn)狀 version A <-- HEAD指針
此時(shí),HEAD指針 指向 version A,并且 stage 和 工作區(qū)的文件已經(jīng)被 version A 的文件重置。整個(gè)項(xiàng)目的狀態(tài)完全回到提交 version A 時(shí)按下回車鍵的那一刻。
想要了解更多關(guān)于Linux方面內(nèi)容的小伙伴,請(qǐng)關(guān)注扣丁學(xué)堂Linux培訓(xùn)官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的Linux視頻,扣丁學(xué)堂老師精心推出的Linux視頻教程定能讓你快速掌握Linux從入門(mén)到精通開(kāi)發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂Linux技術(shù)交流群:422345477。
【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】 【掃碼進(jìn)入JavaEE/微服務(wù)VIP免費(fèi)公開(kāi)課】
查看更多關(guān)于“Linux培訓(xùn)資訊”的相關(guān)文章>>