柚子快報(bào)激活碼778899分享:Git 筆記
柚子快報(bào)激活碼778899分享:Git 筆記
Git 筆記
git 原理git 的四個(gè)區(qū)域文件的四種狀態(tài)git 的工作流程
安裝git配置信息和獲取幫助常用命令創(chuàng)建倉(cāng)庫(kù)跟蹤文件 git add取消跟蹤 git rm提交到倉(cāng)庫(kù) git commit推送到遠(yuǎn)程分支 git pushcommit 的 查看、修改、合并版本回退搭建 git 服務(wù)器
git 原理
git 的四個(gè)區(qū)域
工作區(qū):平時(shí)存放項(xiàng)目代碼的地方暫存區(qū):用于臨時(shí)存放你的改動(dòng),事實(shí)上它只是一個(gè)文件,保存即將提交到文件列表信息本地倉(cāng)庫(kù):倉(cāng)庫(kù)區(qū)(或版本庫(kù)),就是安全存放數(shù)據(jù)的位置,這里面有你提交到所有版本的數(shù)據(jù)。其中HEAD指向最新放入倉(cāng)庫(kù)的版本遠(yuǎn)程倉(cāng)庫(kù):托管代碼的服務(wù)器,可以簡(jiǎn)單的認(rèn)為是你項(xiàng)目組中的一臺(tái)電腦用于遠(yuǎn)程數(shù)據(jù)交換
文件的四種狀態(tài)
Untracked: 未跟蹤, 此文件在文件夾中,但并沒(méi)有加入到git庫(kù),不參與版本控制, 通過(guò) git add 狀態(tài)變?yōu)镾taged。Unmodify: 文件已經(jīng)入庫(kù)且未修改, 即版本庫(kù)中的文件快照內(nè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 則丟棄修改,返回到unmodify狀態(tài), 這個(gè)git checkout即從庫(kù)中取出文件,覆蓋當(dāng)前修改Staged:暫存狀態(tài),執(zhí)行g(shù)it commit則將修改同步到庫(kù)中,這時(shí)庫(kù)中的文件和本地文件又變?yōu)橐恢拢募閁nmodify狀態(tài)。
git 的工作流程
在工作目錄中添加、修改文件;將需要進(jìn)行版本管理的文件 add 到暫存區(qū)域;將暫存區(qū)域的文件 commit 到 git 倉(cāng)庫(kù);本地的修改 push 到遠(yuǎn)程倉(cāng)庫(kù),如果失敗則執(zhí)行第5步(你千萬(wàn)不要把公司代碼傳到GitHub上去?。。。ゞit pull 將遠(yuǎn)程倉(cāng)庫(kù)的修改拉取到本地,如果有沖突需要修改沖突?;氐降谌?因此,git 管理的文件有三種狀態(tài):已修改(modified),已暫存(staged),已提交(committed)
安裝git
linux 下:
sudo apt install git
驗(yàn)證安裝:
git --version
windows下: 在官網(wǎng)下載進(jìn)行安裝:GIt
配置信息和獲取幫助
設(shè)置用戶名稱與郵件地址,不加--global即在項(xiàng)目下使用特定的用戶
git config --global user.name "your name"
git config --global user.email "your email"
查看 git 的配置信息
git config --list
獲取幫助
git help
常用命令
創(chuàng)建倉(cāng)庫(kù)
創(chuàng)建倉(cāng)庫(kù)有兩種方法:
本地倉(cāng)庫(kù)
mkdir proj && cd proj
git init
拉取遠(yuǎn)程倉(cāng)庫(kù)
git clone url
跟蹤文件 git add
git add
// 比如跟蹤目錄下所有文件
git add .
// 跟蹤 .cpp 文件
git add *.cpp
取消跟蹤 git rm
git add 將文件添加到暫存區(qū),git rm 將文件從暫存區(qū)刪除(不再被 git 管理)
// 從暫存區(qū)刪除且將文件刪除
git rm -f
// 僅將文件從暫存區(qū)刪除
git rm --cached
提交到倉(cāng)庫(kù) git commit
git commit -a -m "修改了......"
優(yōu)雅的提交你的修改: message的格式:
type:
feat: 新特性fix: 修改問(wèn)題refactor: 代碼重構(gòu)docs: 文檔修改style: 代碼格式修改, 注意不是 css 修改test: 測(cè)試用例修改chore: 其他修改, 比如構(gòu)建流程, 依賴管理.
scope:
commit 影響的范圍,即影響的模塊或者組件,比如: route, component, utils, build…
subject:
commit 的概述
body:
commit 具體修改內(nèi)容, 可以分為多行, 建議符合 50/72 formatting
footer:
一些備注, 通常是 BREAKING CHANGE 或修復(fù)的 bug 的鏈接,或者feature等等其余的信息.
推送到遠(yuǎn)程分支 git push
首先,你需要關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù),在此之前先生成 ssh key
// ssh-keygen [-t type] [-b bits] [-C comment] [-f output_keyfile] [-N new_passphrase] [-P passphrase]
ssh genkey -t rsa -b 2048 -C "youremail"
然后將密鑰填到 github 上。 查看分支:
git branch
// 修改 master 為 main
git branch -M main
關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)
// git remote add
git remote add origin url
// 查看關(guān)聯(lián)了哪些遠(yuǎn)程倉(cāng)庫(kù)
git remote -v
推送 第一次推送時(shí)加上 -u [set-upstream]建立追蹤關(guān)系,后續(xù)不加分支名會(huì)自動(dòng)推送到這個(gè)分支。本地分支可以追蹤多個(gè)分支。 // git push
git push -u origin main:main
沖突
沖突的產(chǎn)生:假設(shè)A和B共同維護(hù)一個(gè)項(xiàng)目,從同一個(gè)分支main開(kāi)始工作。A克隆了倉(cāng)庫(kù)到本地,并在readme.md文件的末尾添加了一行文字:“添加了新功能A”。然后提交更改并推送到GitHub上的main分支。B也在本地倉(cāng)庫(kù)中對(duì)readme.md進(jìn)行了修改,在文件末尾添加了另一行:“修復(fù)了錯(cuò)誤B”。當(dāng)B嘗試推送更改到main分支時(shí),GitHub會(huì)阻止推送,因?yàn)锽的分支落后于遠(yuǎn)程的main分支(因?yàn)锳剛剛推送了更新)。解決:首先git pull,然后手動(dòng)解決沖突。
git config pull.rebase false # 合并(默認(rèn)策略)
git config pull.rebase true # 變基
git config pull.ff only
commit 的 查看、修改、合并
查看
git log
git log --oneline
// 顯示幾行
git log --[length]
// 跳過(guò)skip條,顯示length條
git log --skip=[skip] -[length]
git log -p
git log --stat
git shortlog
// 過(guò)濾
// data
git log --after="2000-10-1"
git log --before="2024-5-1"
// author
git log --author="ningao"
修改
// 覆蓋上一次修改id
git commit --amend
// 修改任意提交的message
git rebase -i id
合并
git rebase -i id
比較兩次commit之間的差異 首先使用 git log --oneline 查看歷史提交記錄 使用 git diff hash1 hash2 --stat 查看兩次提交之間的差異,這里因?yàn)榻◣?kù)時(shí)沒(méi)有寫(xiě).gitignore文件,所以tracking 了 build 文件夾 使用 git diff hash1 hash2 filename查看某一個(gè)文件修改了那些地方
版本回退
尚未commit
// git-checkout - Switch branches or restore working tree files
git checkout branches/stable-1.1
git checkout a5673b8
git checkout a.cpp
已經(jīng)commit尚未push到remote倉(cāng)庫(kù)
// git-reset - Reset current HEAD to the specified state
// --soft
// --mixed
// --hard
已經(jīng)提交到remote倉(cāng)庫(kù)
搭建 git 服務(wù)器
柚子快報(bào)激活碼778899分享:Git 筆記
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。