學(xué)會(huì)如何利用git來(lái)管理代碼
前言
Git簡(jiǎn)單來(lái)說(shuō)就是代碼版本控制系統(tǒng),通過(guò)他可以進(jìn)行多人開(kāi)發(fā)同一個(gè)項(xiàng)目然后講每個(gè)人的代碼塊合并完成一個(gè)大項(xiàng)目,還能控制代碼版本記錄等。Git四個(gè)區(qū)域
- 工作區(qū):處理工作的區(qū)域(即做項(xiàng)目打代碼的區(qū)域)
- 暫存區(qū):已完成的工作臨時(shí)存放區(qū)域,等待被提交
- 本地倉(cāng)庫(kù):存放數(shù)據(jù)的地方,但是還在本電腦上,若電腦存儲(chǔ)空間損壞還是會(huì)造成代碼消失
- Git遠(yuǎn)程倉(cāng)庫(kù):最終的存放區(qū)域,即遠(yuǎn)程服務(wù)器,電腦存儲(chǔ)空間損壞也不影響遠(yuǎn)程倉(cāng)庫(kù)數(shù)據(jù)
安裝git:
sudo apt-get install git
一、本地倉(cāng)庫(kù)提交與代碼回溯
(1)綁定用戶(hù)名稱(chēng)和郵箱
# 查看配置
git config -l
git config --global user.name "XXXXX"
git config --global user.email "XXXXXXXXX@XXXX.com"
(2)創(chuàng)建git項(xiàng)目
在你的代碼項(xiàng)目目錄下init,會(huì)自動(dòng)創(chuàng)建.git文件夾,用于存放git文件
git init
# 另一種方式是克隆已有的遠(yuǎn)程倉(cāng)庫(kù),將遠(yuǎn)程服務(wù)器上的倉(cāng)庫(kù)完全鏡像一份至本地
git clone 鏈接地址.git
# 例如:
git clone https://github.com/ZARDheart/CplusplusLearn.git
(3)把代碼提交到倉(cāng)庫(kù)
# 放入暫存區(qū)
git add test.cpp
# 所有文件 放入暫存區(qū)
git add .
# 提交到(本地)倉(cāng)庫(kù) -m 參數(shù)添加備注
git commit -m "This is a test."
設(shè)置忽略文件:在主目錄下建立“.gitignore”文件,此文件有如下規(guī)則:
- 空行或以井號(hào)(# )開(kāi)始的行將會(huì)被忽略。
- 可以使用Linux通配符。例如∶星號(hào)(*)代表任意多個(gè)字符,問(wèn)號(hào)(﹖)代表一個(gè)字符,方括號(hào)([abc] )代表可選字符范圍,大括號(hào)( {string1,string2……})代表可選的字符串等。
- 如果名稱(chēng)的最前面有一個(gè)感嘆號(hào)( !),表示例外規(guī)則,將不被忽略。
- 如果名稱(chēng)的最前面是一個(gè)路徑分隔符(/ ),表示要忽略的文件在此目錄下,而子目錄中的文件不忽略。
- 如果名稱(chēng)的最后面是一個(gè)路徑分隔符(/ ),表示要忽略的是此目錄下該名稱(chēng)的子目錄,而非文件(默認(rèn)文件或目錄都忽略)。
例如以下這些實(shí)例:
touch .gitignore
# 填入:
*.txt #忽略所有的.txt結(jié)尾的文件
!lib.txt #但lib.txt除外
/temp #進(jìn)忽略項(xiàng)目根目錄下的TODO文件,不包括其他目錄temp
bulid/ #忽略bulid目錄下的所有文件
doc/*.txt #會(huì)忽略doc/notes.txt 但是不包括doc/sever/arch.txt
(4)git log查看提交節(jié)點(diǎn)記錄(包括節(jié)點(diǎn)名稱(chēng)、commit ID代碼、提交人、提交日期和備注)
git log
# 查看具體修改哪些文件
git log --stat
(5)代碼回溯
# 查看工作區(qū)和暫存區(qū)(add)的差異
git diff
# 查看之前的節(jié)點(diǎn)
git diff ${ID}
# 回溯
git reset --hard ${ID}
# 或
git checkout ${ID}
二、代碼分支
# 查看分支,如果沒(méi)有創(chuàng)建只有g(shù)it自動(dòng)創(chuàng)建的master,星標(biāo)的是當(dāng)前分支
git branch
#新建一個(gè)分支,但依然停留在當(dāng)前分支
git branch 分支名
#新建一個(gè)分支,并切換到該分支
git checkout -b 分支名
# 創(chuàng)建分支develop(用于修改)
git checkout -b develop
# 將新分支合并到master(主程序,穩(wěn)定版)
# 首先提交
git add .
git commit -m "test3"
# 切換到master分支
git checkout master
# 合并:將develop中新修改的內(nèi)容添加/覆蓋到master(當(dāng)前分支)
git merge develop
三、提交到遠(yuǎn)程倉(cāng)庫(kù)(Github)
測(cè)試ssh,在終端輸入
ssh -T git@github.com
顯示:
git@github.com: Permission denied (publickey).
這時(shí)候需要建立公鑰
3.1 建立公鑰
(1)在github上找到并點(diǎn)擊settings,左邊找到SSH keys and GPG keys并點(diǎn)擊出現(xiàn)如下界面:
(2)New SSH Key,然后去終端獲得密鑰
(3)終端輸入:
ssh-keygen -C "xx@xx.com" -f ~/.ssh/github
郵箱為自己創(chuàng)建github時(shí)用的郵箱,按兩次Enter,出現(xiàn)如下代碼:
(4)在終端輸入代碼cat ~/.ssh/github.pub
,出現(xiàn)一大串公鑰,將公鑰復(fù)制到第(2)步的key里面,title隨便寫(xiě)個(gè)名字即可,然后點(diǎn)擊Add SSH Key
(5)在終端輸入ssh -T git@github.com
出現(xiàn)以下代碼意味著該步驟完成(XXXXX為github帳號(hào)名稱(chēng))
Hi XXXXX! You've successfully authenticated, but GitHub does not provide shell access.
3.2 將本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)同步
首先創(chuàng)建自己的本地倉(cāng)庫(kù),以我學(xué)習(xí)C++的代碼為例:
# 初始化
git init
# 所有文件 放入暫存區(qū)
git add .
# 提交到(本地)倉(cāng)庫(kù) -m 參數(shù)添加備注
git commit -m "Learn code for C + +, unfinished version 12.15"
在個(gè)人主頁(yè)的Repositories中New:
在如下界面中,Repository name填寫(xiě)同名的倉(cāng)庫(kù)名,這里是CplusplusLearn,下面可以輸入項(xiàng)目描述以及是否公開(kāi)
創(chuàng)建完成后下面有提示你提交方法:
回到終端,按照以下步驟即可push
git remote add origin https://github.com/ZARDheart/CplusplusLearn.git
git branch -M master
git push -u origin master
push的時(shí)候提醒輸入U(xiǎn)sername還有PassWord,Username是指你github完整的郵箱地址,Password是指Personal access tokens,如何知道token呢?步驟如下:
在github的Settings/Developer Settings/Personal access tokens下Cenerate new token
設(shè)置token的有效期,訪問(wèn)權(quán)限等,要使用token從命令行訪問(wèn)倉(cāng)庫(kù),請(qǐng)選擇repo,要使用token從命令行刪除倉(cāng)庫(kù),請(qǐng)選擇delete_repo,其他根據(jù)需要進(jìn)行勾選
創(chuàng)建之后生成以下代碼,復(fù)制下來(lái)保存,一旦離開(kāi)這個(gè)界面就看不到了
然后重新提交,輸入密碼的時(shí)候直接復(fù)制(不會(huì)顯示,直接回車(chē))
成功提交,如果是公開(kāi)的倉(cāng)庫(kù),別人可以在https://github.com/ZARDheart/CplusplusLearn中看到了。我這是學(xué)習(xí)C++時(shí)使用的代碼,可以參考
三、git命令對(duì)代碼進(jìn)行管理、拉取、安全提交
3.1 Clone遠(yuǎn)程倉(cāng)庫(kù)
# 克隆遠(yuǎn)程倉(cāng)庫(kù),將遠(yuǎn)程服務(wù)器上的倉(cāng)庫(kù)完全鏡像一份至本地
git clone 鏈接地址.git
# clone不同分支
git clone -b 分支名稱(chēng) 鏈接地址.git
# 例如:
git clone -b master https://github.com/ZARDheart/CplusplusLearn.git
3.2 在自己分支上修改代碼
# 查看所有本地分支
git branch
# 查看所有遠(yuǎn)程分支
git branch -r
# 查看所有本地和遠(yuǎn)程分支
git branch -a
# 新建一個(gè)本地分支分支名,用于自己修改代碼
git branch 個(gè)人分支名
# 切換本地分支
git checkout 個(gè)人分支名
# 上面兩句u可以合成一句:新建一個(gè)分支,并切換到該分支
git checkout -b 個(gè)人分支名
# 推送到本地倉(cāng)庫(kù)
git add .
git commit -m '描述內(nèi)容'
# 把新建的本地分支推送到遠(yuǎn)程,遠(yuǎn)程就新建了一個(gè)分支
git push origin 個(gè)人分支名
# 如果在遠(yuǎn)程創(chuàng)建了新分支,本地可以通過(guò)git fetch 來(lái)獲取最新的遠(yuǎn)程分支
git fetch
有了個(gè)人分支后,代碼都在這個(gè)分支上修改,以防跟別人沖突。代碼完成要提交到主分支的時(shí)候,再進(jìn)行下面操作
3.3 將代碼提交到遠(yuǎn)程主倉(cāng)庫(kù)
要先從遠(yuǎn)程主倉(cāng)庫(kù)拉取主分支分支最新代碼,防止別人也推送了代碼到遠(yuǎn)程主倉(cāng)庫(kù),保持本地主倉(cāng)庫(kù)的代碼是最新的,不然你提交的主倉(cāng)庫(kù)可能會(huì)覆蓋掉別人提交的代碼。
# 切換本地主分支
git checkout master # 或者main等
# 從遠(yuǎn)程主倉(cāng)庫(kù)拉取該分支最新代碼
git pull --rebase origin master
再切換回自己分支,合并遠(yuǎn)程主倉(cāng)庫(kù)代碼到自己的倉(cāng)庫(kù)
如果兩個(gè)分支對(duì)同一文件進(jìn)行了不同的修改,Git會(huì)執(zhí)行三方合并來(lái)嘗試自動(dòng)合并這些修改,Git會(huì)比較兩個(gè)分支相對(duì)于共同祖先的修改,并嘗試將它們合并成一個(gè)新的文件狀態(tài):如果兩個(gè)分支對(duì)同一文件的修改不沖突,Git會(huì)自動(dòng)合并這些修改,創(chuàng)建一個(gè)新的合并提交。但如果兩個(gè)分支對(duì)同一行代碼進(jìn)行了不同且沖突的修改,Git將標(biāo)記這些沖突,并在合并時(shí)提示用戶(hù)手動(dòng)解決這些沖突。完成解決沖突后,可以提交這些已解決的文件,完成合并操作。
git checkout 個(gè)人分支名
# 合并遠(yuǎn)程主倉(cāng)庫(kù)代碼到當(dāng)前分支
git merge master
# 把本地分支推送到遠(yuǎn)程
git add .
git commit -m '描述內(nèi)容'
git push origin 個(gè)人分支名
如果開(kāi)發(fā)完成,確認(rèn)要更新到主倉(cāng)庫(kù)。再切換到遠(yuǎn)程主倉(cāng)庫(kù),將自己的倉(cāng)庫(kù)的代碼合并到遠(yuǎn)程主倉(cāng)庫(kù),推送遠(yuǎn)程主倉(cāng)庫(kù)的代碼,然后切換回自己的分支,繼續(xù)開(kāi)發(fā)。
# 切換本地主分支
git checkout master
# 合并本地分支到當(dāng)前主分支
git merge 個(gè)人分支名
# 推送主分支到本地倉(cāng)庫(kù)
git add .
git commit -m '描述內(nèi)容'
git push origin master
git checkout 個(gè)人分支名
3.4 刪除git分支
# 刪除本地分支
git branch -d <BranchName>
# 刪除遠(yuǎn)程分支
git push origin --delete <BranchName>
提示如下截圖錯(cuò)誤信息:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-767888.html
To https://github.com/ZARDheart/CplusplusLearn.git
! [remote rejected] master (refusing to delete the current branch: refs/heads/master)
error: failed to push some refs to 'https://github.com/ZARDheart/CplusplusLearn.git'
刪除指定的分支是當(dāng)前默認(rèn)分支,所以無(wú)法刪除,在倉(cāng)庫(kù)的settings中將當(dāng)前默認(rèn)分支有master修改main(重新提交的),再次刪除即可正常文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-767888.html
到了這里,關(guān)于Git使用教程,本地與遠(yuǎn)程(Github)倉(cāng)庫(kù)提交代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!