由于個(gè)人記性不怎么好,對(duì)于版本控制工具的使用也不怎么常用,對(duì)于一些命令的使用參照各個(gè)博客,僅做個(gè)人記錄。
2022-08-28 :經(jīng)過(guò)了這么久的拖延,今天終于下定決心好好更新一下關(guān)于git操作的內(nèi)容,因?yàn)樽约阂彩峭ㄟ^(guò)諸多前輩的文章和視頻,逐步摸索出一套git使用方案,從最基礎(chǔ)的開(kāi)始,再到項(xiàng)目基本使用,最后就是較為成熟和完善的團(tuán)隊(duì)協(xié)作開(kāi)發(fā)。
首先理解代碼倉(cāng)庫(kù)之間的關(guān)系
追蹤和未追蹤:針對(duì)的是工作區(qū)文件的一個(gè)狀態(tài),追蹤則表示文件被git納入版本控制,未追蹤則表示文件沒(méi)有被git納入版本控制??梢酝ㄟ^(guò)git add命令添加文件到暫存區(qū)進(jìn)行跟蹤。
遠(yuǎn)程代碼倉(cāng)庫(kù)應(yīng)該是我們最好理解的一個(gè)內(nèi)容了,對(duì)應(yīng)著一個(gè)云端的文件存儲(chǔ),通過(guò)git命令結(jié)合身份認(rèn)證,能夠?qū)⑽覀儽镜氐拇a(文本、圖片等等)上傳到一個(gè)服務(wù)器上【push】,即github或gitee。出了上傳我們也能夠下載回來(lái)【pull】。同時(shí)平臺(tái)對(duì)于服務(wù)于無(wú)數(shù)個(gè)用戶,對(duì)應(yīng)的將代碼存放容器命名為倉(cāng)庫(kù),同時(shí)也拓展了倉(cāng)庫(kù)的一系列功能。
本地代碼管理分為工作區(qū)、暫存區(qū)、本地倉(cāng)庫(kù)三部分。
工作區(qū):我們打開(kāi)項(xiàng)目的時(shí)候,一側(cè)菜單文件目錄中的所有內(nèi)容就是我們的工作區(qū),在這里我們可以進(jìn)行增、刪、改等操作,需要注意的是這里面不包括我們的.git隱藏文件夾內(nèi)容。
暫存區(qū):暫存區(qū)是一個(gè)很有意思的設(shè)置,位于.git目錄下隸屬于我們工作區(qū)和本地倉(cāng)庫(kù)的中間過(guò)渡件,它里面的內(nèi)容既不是我們?cè)镜拇a,也不是我們修改后的代碼,它是作為一個(gè)日志一樣的存在,記錄了我們所有在工作區(qū)的改動(dòng),包括文件、代碼的增刪改、重命名。暫存區(qū)存在最大的意義是記錄了發(fā)生變化前后的部分狀態(tài),而不是直接存儲(chǔ)前后兩份文本,這顯然是不合理的。
本地倉(cāng)庫(kù):通過(guò)【commit】將暫緩區(qū)內(nèi)的代碼狀態(tài)同步到本地倉(cāng)庫(kù)作為備份,形成一個(gè)版本,該版本保存了所有暫緩區(qū)內(nèi)修改后的代碼,是一個(gè)同步的、工作區(qū)某一個(gè)時(shí)刻的全部代碼。
本地代碼倉(cāng)庫(kù)搭建、遠(yuǎn)程倉(cāng)庫(kù)連接
下載git并配置環(huán)境
git的安裝和配置文章有很多,小伙伴們可以參考:git的安裝
這部分需要牢記的是如下幾個(gè)命令:
git config --local -l #查看倉(cāng)庫(kù)級(jí)別的配置 優(yōu)先級(jí)高
git config --global -l #全局環(huán)境下的配置信息 包括user.name和user.email兩部分。優(yōu)先級(jí)較高
git config --system -l #系統(tǒng)環(huán)境下的配置信息。優(yōu)先級(jí)低
本地git環(huán)境已經(jīng)配置的操作
方式一的代碼:
echo "# project_1" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/Super-chen-big/project_1.git
git push -u origin main
方式二的代碼:
git remote add origin https://github.com/Super-chen-big/project_1.git
git branch -M main
git push -u origin main
- 需要注意的是以前創(chuàng)建的倉(cāng)庫(kù)主分支名字變?yōu)榱薽ain,不再是master了
git branch -M main 即將當(dāng)前分支名稱更改為main。
-
將本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián)
注意本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)的關(guān)聯(lián)和本地分支與遠(yuǎn)程分支是完全不一樣的
git remote add origin 遠(yuǎn)程倉(cāng)庫(kù)地址
- 將本地代碼倉(cāng)庫(kù)分支關(guān)聯(lián)到遠(yuǎn)程倉(cāng)庫(kù)分支 push操作
我們要想將本地分支推送到遠(yuǎn)程倉(cāng)庫(kù)中,在遠(yuǎn)程倉(cāng)庫(kù)就必須有一個(gè)分支和本地分支關(guān)聯(lián)起來(lái)。通過(guò) git push -u <遠(yuǎn)程倉(cāng)庫(kù)名> <本地分支名> 即可完成,這條命令在遠(yuǎn)程倉(cāng)庫(kù)創(chuàng)建一個(gè)與本地分支同名的分支,并且將本地倉(cāng)庫(kù)分支和遠(yuǎn)程倉(cāng)庫(kù)分支關(guān)聯(lián)起來(lái),同時(shí)將本地倉(cāng)庫(kù)中分支的內(nèi)容推送到遠(yuǎn)程倉(cāng)庫(kù)分支!
代碼倉(cāng)庫(kù)相關(guān)指令操作
一個(gè)基本提交流程以及說(shuō)明。
紅色表示工作區(qū)有修改,但是沒(méi)有提交到暫存區(qū)。需要git add指令來(lái)操作
綠色表示暫存區(qū)內(nèi)存在沒(méi)有同步到本地倉(cāng)庫(kù)的內(nèi)容。需要git commit指令來(lái)操作
灰色的(use git push to publish your local commits)表示本地倉(cāng)庫(kù)有改變,即生成了一個(gè)新的版本,需要通過(guò)git push命令來(lái)同步到遠(yuǎn)程倉(cāng)庫(kù)。再次查詢狀態(tài)時(shí),狀態(tài)會(huì)變?yōu)閚othing to commit, working tree clean
將工作區(qū)修改同步到暫存區(qū)
- 將當(dāng)前路徑下所有更改同步到暫存區(qū)
git add .
- 不管當(dāng)前位于工作區(qū)的那個(gè)路徑下,都將工作區(qū)所有的變化同步到暫存區(qū)
git add --all
- 加上了參數(shù)-u表示的意思是在git add .前提下,做了一個(gè)同步篩選,即要求是已跟蹤文件中的刪改,不包括新增加的文件。
git add -u .
- 參數(shù)-A表示將所有的已跟蹤的文件修改和刪除和新增的未跟蹤的文件都添加到暫存區(qū)。
git add -A .
- 將某個(gè)文件類型的文件都添加到暫存區(qū)
git add *.html
區(qū)別git add . 和git add *;git add . 會(huì)把本地所有untrack的文件都加入暫存區(qū),并且會(huì)根據(jù).gitignore做過(guò)濾,但是git add * 會(huì)忽略.gitignore把任何文件都加入
暫存區(qū)內(nèi)容提交到本地代碼倉(cāng)庫(kù)
參照前輩在博客里的描述: git commit 主要是將暫存區(qū)里的改動(dòng)給提交到本地的版本庫(kù)。每次使用git commit 命令我們都會(huì)在本地版本庫(kù)生成一個(gè)40位的哈希值,這個(gè)哈希值也叫commit-id,commit-id在版本回退的時(shí)候是非常有用的,它相當(dāng)于一個(gè)快照,可以在未來(lái)的任何時(shí)候通過(guò)與git reset的組合命令回到這里。
- 將本地暫存的修改同步到本地倉(cāng)庫(kù),git commit 也可以通過(guò)vim編輯器來(lái)編輯并提交內(nèi)容
git commit -m "說(shuō)明內(nèi)容"
- 從工作區(qū)直接一步到位,同步到本地倉(cāng)庫(kù)。
git commit -a -m "信息內(nèi)容"
- 通過(guò)vim修改上一次的提交信息,但是需要注意commitId發(fā)生改變,再次提交會(huì)出現(xiàn)不同步的錯(cuò)誤,可以加上-f強(qiáng)制合并提交。除此之外,可以將將最近的修改追加到上一次提交上,即commitid不變。這個(gè)指令的意義是出于一些比較小的改動(dòng)不再重現(xiàn)創(chuàng)建一個(gè)commit。
git commit --amend
提交到遠(yuǎn)程倉(cāng)庫(kù)
參考了博客:git push 詳解
參照下面這個(gè)命令格式,我們將常用的push命令及其含義羅列一遍。
git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
- 將本地分支推送到與之存在追蹤關(guān)系的遠(yuǎn)程分支,如果該遠(yuǎn)程分支不存在,則會(huì)被新建。
git push origin master #將本地的master分支推送到origin主機(jī)的master分支,不存在則新建。
- 只省略本地分支名進(jìn)行推送的話,相當(dāng)于推送了一個(gè)空的本地分支去覆蓋遠(yuǎn)程分支,等同于刪除遠(yuǎn)程分支。
git push origin :main #等同于git push origin --delete master
- 如果當(dāng)前分支和遠(yuǎn)程分支間存在追蹤關(guān)系,則可以簡(jiǎn)化提交命令,可以省略本地分支和遠(yuǎn)程分支,一般是分支同名的追蹤關(guān)系
git push origin
- 如果當(dāng)前分支只有一個(gè)追蹤分支,那么主機(jī)名都可以省略
git push
- 如果當(dāng)前分支與多個(gè)主機(jī)存在追蹤關(guān)系,則可以使用-u選項(xiàng)指定一個(gè)默認(rèn)主機(jī),這樣后面就可以不加任何參數(shù)使用git push。
git push -u origin master
遠(yuǎn)程分支
強(qiáng)烈推薦大家去看一看這一篇博客:git命令及git合并分支進(jìn)行多人協(xié)作
git branch -r #列出所有遠(yuǎn)程分支。
git branch -a #列出所有分支。
git branch -vv #列出本地分支和遠(yuǎn)程分支的映射信息
查看遠(yuǎn)程倉(cāng)庫(kù)所有分支列表
git remote show origin
將遠(yuǎn)程倉(cāng)庫(kù)分支下載到本地分支:默認(rèn)將自動(dòng)切換分支
git checkout 遠(yuǎn)程分支名稱
拉取當(dāng)前分支在遠(yuǎn)程倉(cāng)庫(kù)對(duì)應(yīng)分支最新文件內(nèi)容
git pull
刪除遠(yuǎn)程倉(cāng)庫(kù)指定分支
git push 遠(yuǎn)程倉(cāng)庫(kù)名稱 --delete 遠(yuǎn)程分支名稱
本地分支
參考博客:git 創(chuàng)建本地分支 切換本地分支 合并本地分支
查看本地分支
git branch
查看遠(yuǎn)程分支
git branch -r
查看所有分支,包括本地和遠(yuǎn)程分支
git branch -a
創(chuàng)建本地分支
git branch <branchName>
切換本地分支
git checkout <branchName>
創(chuàng)建一個(gè)分支并切換到該分支
git checkout -b <branchName>
合并某分支到當(dāng)前分支
git merge <branchName>
刪除分支:只能刪除非當(dāng)前分支,和已經(jīng)合并過(guò)的分支
git branch -d <branchName>
強(qiáng)制刪除對(duì)應(yīng)分支,哪怕他是沒(méi)有經(jīng)過(guò)合并的分支
git branch -D <branchName>
日志查看
- 顯示日志詳情
git log
- 只顯示日志中commitid和message
git log --pretty=oneline
- 緊接著上一個(gè)指令,-n即顯示出前n行。
git log --pretty=oneline -2
對(duì)比查看工作區(qū)、暫存區(qū)、本地倉(cāng)庫(kù)
git diff 查看工作區(qū)與暫存區(qū)的差別:必須是已經(jīng)跟蹤了的文件,即提交到暫存區(qū)的文件
git diff
查看工作區(qū)和本地倉(cāng)庫(kù)的差別:必須是已經(jīng)跟蹤了的文件
git diff HEAD
查看暫存區(qū)與本地倉(cāng)庫(kù)的差別 :必須是已經(jīng)跟蹤了的文件
git diff --cached
補(bǔ)充內(nèi)容
git fetch和git pull的區(qū)別
- git fetch僅僅是將遠(yuǎn)程倉(cāng)庫(kù)的更新拉取到本地倉(cāng)庫(kù),更新本地倉(cāng)庫(kù)中對(duì)遠(yuǎn)程倉(cāng)庫(kù)的引用等信息,同時(shí)會(huì)生成FETCH——HEAD文件保存對(duì)應(yīng)遠(yuǎn)程分支的最新提交記錄的值。即git fetch 只會(huì)拉取遠(yuǎn)程倉(cāng)庫(kù)的更新,但是不會(huì)將其合并到本地。
- git pull 將遠(yuǎn)程倉(cāng)庫(kù)的更新拉取下來(lái)并自動(dòng)進(jìn)行合并操作。
一般更建議先使用 git fetch拉去更新,然后再用git merge合并,這樣可以考慮是否要將遠(yuǎn)程倉(cāng)庫(kù)合并到我們本地。
創(chuàng)建新的本地分支,切換本地分支,進(jìn)行開(kāi)發(fā)的時(shí)候,所遇到的代碼版本問(wèn)題
經(jīng)過(guò)我的實(shí)際操作驗(yàn)證,得出結(jié)論。我們?cè)趧?chuàng)建代碼分支的時(shí)候,相當(dāng)于對(duì)之前分支代碼進(jìn)行了一次快照,我們?cè)谛路种系囊磺懈?,與原分支無(wú)關(guān),這一點(diǎn)我們?cè)谇袚Q分支的時(shí)候可以看到,工作區(qū)是不同的(新分支上,我新增了一個(gè)文件,切換回原分支的時(shí)候,文件消失。和之前的快照一樣。)所以不需要擔(dān)心代碼隔離的問(wèn)題。
關(guān)于使用git merge和git rebase的區(qū)別問(wèn)題文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-409868.html
相同點(diǎn):都可以合并代碼
不同點(diǎn):
1.通過(guò)merge合并分支會(huì)新增一個(gè)merge commit,然后將兩個(gè)分支以前的commit記錄都指向這個(gè)新的commit,是一種非破壞性的操作,保留之前的每個(gè)分支的commit,現(xiàn)有分支不會(huì)被更改,但是會(huì)導(dǎo)致歷史記錄相對(duì)復(fù)雜。
2.rebase會(huì)先找到兩個(gè)分支的第一個(gè)共同的commit祖先記錄,提取在這之后的所有commit記錄,將這些記錄添加到目標(biāo)分支的最新提交后面,變成了線性的記錄,有效整合所有分支上的提交;主要好處是歷史記錄清晰,是在原有提交的基礎(chǔ)上將差異內(nèi)容反映出來(lái),消除了git merge帶來(lái)的不必要的合并提交。
3.rebase操作后會(huì)丟棄當(dāng)前分支已經(jīng)提交的commit,所以不要在已經(jīng)push到遠(yuǎn)程以及和其他人正在協(xié)作開(kāi)發(fā)的分支上執(zhí)行rebase操作文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-409868.html
到了這里,關(guān)于小白都看得懂的git代碼倉(cāng)庫(kù)管理手冊(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!