一文普及 Git 使用與常用命令整理

閑言碎語(yǔ)

?剛工作沒(méi)幾年,最開(kāi)始使用的是 svn,感覺(jué)操作簡(jiǎn)單,就是多人開(kāi)發(fā)的時(shí)候管理代碼賊麻煩。后來(lái)?yè)Q了新公司后使用 Git 管理代碼,發(fā)現(xiàn)這玩意簡(jiǎn)直不要太好用,尤其是可以建分支,減少了工作中很多麻煩的操作。于是乎我變成了 Git 的忠實(shí)粉絲。我使用的是 Win 電腦,最開(kāi)始不知道 Git 命令,也懶得去敲,所以一直使用 sourceTree 來(lái)操作(也推薦小白先用該工具理解操作的含義后再考慮用命令方式操作)。后來(lái)發(fā)現(xiàn)用工具沒(méi)有用命令行那樣裝*,所以也開(kāi)始了解一些常用的 Git 命令,于是乎就有了這篇文。文中的一些概念都是我理解后白話的,如有什么不足,歡迎糾正補(bǔ)充。

概念介紹

1. 區(qū)分“本地操作”與“遠(yuǎn)程操作”

?本地操作:表示操作的是本地電腦的文件夾中的文件。

?遠(yuǎn)程操作:表示操作的是遠(yuǎn)程倉(cāng)庫(kù)(如: gitLab 、碼云等第三方代碼管理倉(cāng)庫(kù))中的文件。

2. 區(qū)分“工作區(qū)”、“暫存區(qū)”與“待推送區(qū)”

?注意:工作區(qū)、暫存區(qū)與待推送區(qū)都是指本地操作。(名字是我自己理解后起的,歡迎糾正為正規(guī)名稱(chēng))

?工作區(qū):表示正在修改或修改過(guò)的文件的存儲(chǔ)區(qū)域,也就是文件夾中的文件。

?暫存區(qū):表示將修改過(guò)的文件打上標(biāo)識(shí),標(biāo)記為已經(jīng)確認(rèn)修改完成的文件,體現(xiàn)在文件夾中的 .git 文件。

?待推送區(qū):表示更換暫存區(qū)中的文件標(biāo)識(shí),標(biāo)記為本地代碼已經(jīng)全部修改完畢,可以推送到遠(yuǎn)程倉(cāng)庫(kù)了,體現(xiàn)在文件夾中的 .git 文件。

3. 區(qū)分主線與分支

?主線:新建的遠(yuǎn)程倉(cāng)庫(kù)默認(rèn)會(huì)生成一個(gè) master 分支。

?分支:根據(jù)業(yè)務(wù)需求創(chuàng)建的分支,常用的有 feature 分支(功能分支)、bug 分支(問(wèn)題修復(fù)分支)

?ps: 建議不要直接在 master 分支上開(kāi)發(fā),而是從 master 上新建 feature 分支,待開(kāi)發(fā)完成、測(cè)試無(wú)誤后合并到 master 上。

4. Git 標(biāo)簽

?標(biāo)簽通常用于代碼封版的時(shí)候使用。作用于 commitID 上,因?yàn)閏ommitID 是一串無(wú)規(guī)則字符串,不易區(qū)分和理解,所以添加標(biāo)簽可以方便區(qū)分版本與代碼回溯,并且可通過(guò)標(biāo)簽快速找到對(duì)應(yīng)的 commitID。

實(shí)際場(chǎng)景中使用Git命令

一、本地代碼已經(jīng)寫(xiě)完,如何推送到第三方代碼管理倉(cāng)庫(kù)(如:碼云等)的新建項(xiàng)目中?

  1. 打開(kāi) Git 命令工具,進(jìn)入到本地代碼文件夾,執(zhí)行 git init 初始化該文件夾。
  2. 執(zhí)行 git remote add origin + 遠(yuǎn)程項(xiàng)目地址,關(guān)聯(lián)本地文件夾與遠(yuǎn)程庫(kù)。
  3. 執(zhí)行 git status,查看被修改過(guò)的文件。
  4. 如果忘記修改了哪些內(nèi)容,可以執(zhí)行 git diff + 步驟3中顯示的修改過(guò)的文件路徑(注意:一定按照步驟3顯示的文件按路徑寫(xiě),精確到文件名稱(chēng)與后綴),查看完可以通過(guò) q 或者 shift+z+z (按住 shift 同時(shí)按兩次 z 鍵)退出。
  5. 如果有一些文件不想修改,可以執(zhí)行 git checkout -- 文件路徑 來(lái)撤銷(xiāo)修改。
  6. 確認(rèn)沒(méi)問(wèn)題了,執(zhí)行 git add 文件路徑 來(lái)一個(gè)個(gè)添加文件,或者執(zhí)行 git add 文件夾路徑 添加整個(gè)文件夾下的文件,再或者執(zhí)行 git add -A 添加全部文件到暫存區(qū)。

    ************** PS:到此為止,結(jié)束了“工作區(qū)”的操作 **************
  7. 如果此時(shí)需要干點(diǎn)別的,這次的代碼下次管理的話,可以執(zhí)行 git stash 將代碼進(jìn)行存儲(chǔ)(當(dāng)然它也將工作區(qū)中的代碼一起存儲(chǔ)了),之后要是想看存儲(chǔ)了哪些,可以執(zhí)行 git stash list,如果想恢復(fù)就執(zhí)行 git stash apply +list中的id。更多儲(chǔ)藏命令,請(qǐng)參照本文命令整理。
  8. 如果有些文件不想提交了,可執(zhí)行 git reset HEAD +文件路徑,將文件退回到工作區(qū),再由工作區(qū)放棄修改。
  9. 確認(rèn)沒(méi)啥問(wèn)題就可以執(zhí)行 git commit -m +"提交備注",將代碼提交到待推送區(qū)。注意:一定要寫(xiě)提交備注,方便以后查看知道提交了什么功能等。

    ************** PS:到此為止,結(jié)束了“暫存區(qū)”的操作 **************
  10. 如果不想推送到遠(yuǎn)程倉(cāng)庫(kù),可執(zhí)行 git reset --hard HEAD^,退回到上一次提交的版本。
  11. 確認(rèn)沒(méi)啥問(wèn)題,執(zhí)行 git push -u origin +自己的分支,將代碼推送到遠(yuǎn)程。(第一次推送需要添加-u,以后可以省略)更多撤銷(xiāo)待推送區(qū)代碼命令,請(qǐng)參照本文命令整理。

    ************** PS:到此為止,所有操作結(jié)束 **************

二、我想查看之前都提交了什么東西,怎么操作?

?執(zhí)行 git log 可以查看詳細(xì)的提交信息(包括 commitID、提交人、提交時(shí)間、提交備注)。

?如果只想看 CommitID 和 提交備注,可執(zhí)行 git log --pretty=oneline。<br/> &emsp;如果只看某個(gè)文件的提交記錄,可打開(kāi)指定文件所在的文件夾,執(zhí)行git log --pretty=oneline +指定文件名`。

三、線上、內(nèi)網(wǎng)、測(cè)試三種環(huán)境的代碼怎么區(qū)分?

這里就要用到 Git 最好用的功能了(個(gè)人認(rèn)為)—— 分支!

  1. Git 項(xiàng)目自帶一個(gè) master 分支(主線),可以以它為線上環(huán)境。
  2. 在 master 分支上執(zhí)行 git checkout -b +分支名,可以創(chuàng)建并切換到該分支,以它為內(nèi)網(wǎng)環(huán)境。這里暫命名為 dev 分支
  3. 在從 master 分支上新建一個(gè)測(cè)試分支,這里暫命名為 dev-test 分支。
  4. 三種環(huán)境搭建完成后,可以在 dev 分支中進(jìn)行日常開(kāi)發(fā)工作,開(kāi)發(fā)完成后,執(zhí)行 git checkout dev-test 切換到 dev-test 分支,然后執(zhí)行 git merge dev -m +"合并備注" 將 dev 分支中的代碼合并到 dev-test 分支,或者執(zhí)行 git merge --on-ff -m +"合并備注" 可以合并分支并生成合并日志,然后測(cè)試成功之后再合并到 master 上進(jìn)行發(fā)版。
  5. 如果你忘記你又哪些分支時(shí),可執(zhí)行 git branch 查看所有分支名,分支名前面帶星號(hào)的就是當(dāng)前分支。
  6. 在測(cè)試期間如果出現(xiàn) bug ,可新建 bug 分支(git checkout -b bug-***),在修復(fù)后再合并到 dev 分支,然后執(zhí)行 git branch -d +分支名 將該分支刪除。
  7. 這里的所有操作都是本地操作!如果想在遠(yuǎn)程倉(cāng)庫(kù)也有你新建的分支,需要執(zhí)行 git push origin +分支名推送到遠(yuǎn)程倉(cāng)庫(kù)。

怎么從現(xiàn)有的遠(yuǎn)程倉(cāng)庫(kù)獲取代碼開(kāi)發(fā)呢?

  1. 執(zhí)行 git clone +遠(yuǎn)程倉(cāng)庫(kù)代碼地址將遠(yuǎn)程的 master 代碼拉取到本地。
  2. 拉取到本地后,如果想再拉取分支上的代碼,可執(zhí)行 git pull origin +遠(yuǎn)程分支名 將指定分支拉去到本地。
  3. 如果你是參與開(kāi)源項(xiàng)目,最好拉去代碼后新建一個(gè)自己分支,開(kāi)發(fā)結(jié)束后,可以將分支推送到遠(yuǎn)程倉(cāng)庫(kù),由項(xiàng)目管理者確認(rèn)是否要合并你的代碼。

本地代碼保存到多個(gè)第三方管理倉(cāng)庫(kù)該怎么操作呢?

  1. 先將本地代碼關(guān)聯(lián)到一個(gè)第三方管理倉(cāng)庫(kù) git remote add origin +第三方管理倉(cāng)庫(kù)地址,然后將代碼推送。
  2. 代碼推送成功后,執(zhí)行 git remote remove origin 取消關(guān)聯(lián),再執(zhí)行步驟1中的命令,關(guān)聯(lián)其他的第三方倉(cāng)庫(kù)。
  3. 如果不知道現(xiàn)在關(guān)聯(lián)的是哪一個(gè)倉(cāng)庫(kù)了,可執(zhí)行 git remote -v 查看當(dāng)前管理的倉(cāng)庫(kù)地址。

多人開(kāi)發(fā)時(shí)代碼該如何管理呢?

  1. 從開(kāi)發(fā)分支(暫叫 dev 分支)上新建自己的功能分支(feature 分支),然后進(jìn)行開(kāi)發(fā)。
  2. 開(kāi)發(fā)完成,先執(zhí)行 git pull 拉取 dev 分支上最新的代碼。然后執(zhí)行 git push origin dev 將自己的代碼推送到遠(yuǎn)程倉(cāng)庫(kù)。
  3. 如果拉取 dev 分支后提示有沖突時(shí),需要手動(dòng)對(duì)沖突代碼進(jìn)行取舍,處理結(jié)束后再提交推送。
  4. 如果 git pull 提示 no tracking information,則說(shuō)明本地分支與遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建,用命令 git branch --set-upstream-to=遠(yuǎn)程主分支/遠(yuǎn)程分支 本地分支。

常用命令整理

本地操作

  1. git init :初始化文件夾為 git 倉(cāng)庫(kù)
  2. git add +文件路徑 :將文件添加到“暫存區(qū)”
  3. git commit -m +提交備注 : 將文件提交到“待推送區(qū)”
  4. git status :查看被修改過(guò)的文件
  5. git deff +文件路徑 :比較查看文件修改了哪些內(nèi)容
  6. git log :查看詳細(xì)的提交記錄
  7. git log --pretty=oneline :僅查看包含 commitID 和提交備注的提交記錄
  8. git log --pretty=oneline +文件名 :到某個(gè)文件夾下執(zhí)行該代碼,查看指定文件的提交記錄
  9. qshift+z+z :退出查看日志或記錄
  10. git checkout -- 文件路徑 :撤銷(xiāo)“工作區(qū)”修改的文件內(nèi)容
  11. git reset HEAD 文件路徑 :撤銷(xiāo)“暫存區(qū)”修改的文件內(nèi)容
  12. git reset --hard HEAD^ :回退到上個(gè)版本(上一次的commit)
  13. git reset --hard HEAD~10 : 回退到上10個(gè)版本
  14. git reset --hard +commitID :退回到指定 commit
  15. git reflog :查看之前的 commitID
  16. git rm +文件路徑 :刪除指定文件

遠(yuǎn)程操作

  1. git remote add origin 遠(yuǎn)程倉(cāng)庫(kù)地址 :關(guān)聯(lián)遠(yuǎn)程庫(kù)
  2. git remote remove origin :取消關(guān)聯(lián)
  3. git push -u origin +本地分支名 : 將分支推送到遠(yuǎn)程倉(cāng)庫(kù)
  4. git clone +遠(yuǎn)程代碼地址 :拉取遠(yuǎn)程倉(cāng)庫(kù)代碼
  5. git pull origin +遠(yuǎn)程倉(cāng)庫(kù)分支 : 拉取指定遠(yuǎn)程倉(cāng)庫(kù)分支代碼
  6. git remote -v :查看遠(yuǎn)程倉(cāng)庫(kù)詳細(xì)信息(倉(cāng)庫(kù)連接地址)

分支操作

  1. git checkout -b +分支名 :創(chuàng)建并切換分支
  2. git checkout +分支名 :切換分支
  3. git branch +分支名 :創(chuàng)建分支
  4. git branch :查看分支
  5. git merge +被合并分支名 :合并分支
  6. git merge v--on-ff -m +合并描述 : 合并分支并生成合并日志
  7. git branch -d +分支名 :刪除分支
  8. git branch -D +分支名 :強(qiáng)制刪除分支
  9. git log --graph --pertty=oneline -abbrev-commit :查看分支合并情況

儲(chǔ)藏管理

  1. git stash :儲(chǔ)藏當(dāng)前“工作區(qū)”內(nèi)容
  2. git stash list :查看儲(chǔ)藏內(nèi)容
  3. git stash apply :恢復(fù)儲(chǔ)藏內(nèi)容到工作區(qū),但不刪除儲(chǔ)藏內(nèi)容
  4. git stash apply +儲(chǔ)藏內(nèi)容的key :恢復(fù)指定儲(chǔ)藏內(nèi)容
  5. git stash drop :刪除儲(chǔ)藏內(nèi)容
  6. git stash drop +儲(chǔ)藏內(nèi)容的key :刪除指定儲(chǔ)藏內(nèi)容
  7. git stash pop +儲(chǔ)藏內(nèi)容的key :恢復(fù)并刪除指定儲(chǔ)藏內(nèi)容

標(biāo)簽管理

  1. git tag +標(biāo)簽名 :創(chuàng)建標(biāo)簽,默認(rèn)打在最新的 commitID 上
  2. git tag +標(biāo)簽名 +commitID :在指定 commitID 上創(chuàng)建標(biāo)簽
  3. git tag :查看所有標(biāo)簽,按字母排序
  4. git show +標(biāo)簽名 :查看指定標(biāo)簽信息
  5. git tag -a +標(biāo)簽名 -m +標(biāo)簽描述 :創(chuàng)建帶描述的標(biāo)簽
  6. git tag -d +標(biāo)簽名 :刪除指定標(biāo)簽
  7. git push +遠(yuǎn)程分支 +標(biāo)簽名 :推送指定本地標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù)
  8. git push +遠(yuǎn)程分支名 --tags :推送全部未推送的本地標(biāo)簽

結(jié)束語(yǔ)

該文章參考廖雪峰老師的 Git 教程+平常搜索收集的,感謝廖雪峰老師和各位提供命令筆記的同學(xué)們。同時(shí)該文章中如有操作命令錯(cuò)誤或者您有其他常用命令,歡迎下方留言。

?著作權(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)容

  • git 使用筆記 git原理: 文件(blob)對(duì)象,樹(shù)(tree)對(duì)象,提交(commit)對(duì)象 tree對(duì)象 ...
    神刀閱讀 3,848評(píng)論 0 10
  • 簡(jiǎn)介 Git是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項(xiàng)目。 Git 與常用的版本控制工具 ...
    閩越布衣閱讀 2,872評(píng)論 0 18
  • 這篇博文是自己在學(xué)習(xí)git過(guò)程中的思考總結(jié)。本文僅僅代表個(gè)人的看法,如有不妥地方還請(qǐng)本文文末留言。 ?? 原文鏈接g...
    Ming_Hu閱讀 1,270評(píng)論 4 18
  • 配置 git config --global user.name [name] git config --glob...
    jamalping閱讀 406評(píng)論 0 0
  • Git 是目前最流行的分布式版本控制系統(tǒng)之一。 版本控制指的是,記錄每次版本變更的內(nèi)容和時(shí)間等細(xì)節(jié),保留各版本之間...
    神齊閱讀 1,505評(píng)論 0 7

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