Git是一個開源的分散式版本控制系統,可以有效、高速地處理從很小到非常大的專案版本管理。
在團隊開發中git是必不可少的,它是目前為止最流行的版本控制工具
Git是免費、開源的,由Linux之父花了兩週時間寫出來的(人與人之間的差距怎麼這麼大!)
b站狂神:有道無術、術尚可求,有術無道、止於術!
除了git還有svn之類的版本控制系統,它們主要區別在於一個是分散式,一個是集中式
分散式
代表:Git
分散式版本控制系統,每個人的電腦都相當於伺服器,當你拉取倉庫的程式碼後,你的電腦就是一個完整的版本庫,工作時不需要聯網,所有版本都在自己的本機裡,當你想把自己的程式碼提交到主倉庫時,只需要在聯網時合併推播到主倉庫就可以了。
集中式
代表:SVN
集中式版本控制系統,都有一個統一的版本號,放在一個統一的伺服器上,工作時把最新的版本的程式碼拉取到電腦上,程式碼完成後在把寫完的程式碼推播到伺服器上,由於所有的操作都需要伺服器的支援,對網路要求比較大,而且如果伺服器裡的資料出了問題,那麼所有的資料都會丟失,本機使用者端僅儲存當前版本的資訊。
下載
git官網下載:https://git-scm.com/download/win(速度較慢,不推薦)
映象下載:https://registry.npmmirror.com/binary.html?path=git-for-windows/
安裝
下載對應版本後無腦安裝即可(更改安裝位置的注意一下安裝位置)
安裝完git後會在開始選單和右鍵資料夾下看到對應的git程式,這是因為在剛才安裝時候無腦下一步的結果,由於個人不喜歡右鍵選單項多出來東西,所以這裡介紹下怎麼刪除它
刪除右鍵選單項
Win+R輸入regedit
開啟登入檔
進入右鍵選單目錄:HKEY_CLASSES_ROOT\Directory\Background\shell
刪除下面兩個資料夾即可
HKEY_CLASSES_ROOT\Directory\Background\shell\git_shell
HKEY_CLASSES_ROOT\Directory\Background\shell\git_gui
在安裝完Git後,是需要一些全域性設定的
這裡不設定也可以,當遇到要求登陸許可權的遠端倉庫時會讓你在手動輸入使用者名稱、郵箱、以及密碼
Git設定
列出設定的所有命令:git config
設定使用者名稱和密碼:
git config --global user.name "your name" // 設定全域性使用者名稱
git config --global user.email "your email" // 設定郵箱
這裡的 --global
為全域性設定,如果要在特定的的專案中使用不同的名稱,那就不使用該引數,只為當前所在倉庫設定。
檢視所有設定:git config -l
Git相關的組態檔:
C:\Users\你的使用者名稱\.gitconfig
你的安裝目錄\Git\etc\gitconfig
三大區域
git在本地分為三個區域,分別為工作區、快取區和資源區(本地),其實還有一個遠端的一個倉庫區,但不在本地就不做過多解釋
工作區:平時放專案程式碼的地方,包括git已經管理的檔案區域和新增以及修改的檔案區域
快取區:用於臨時存放改動的程式碼,它本質上是一個檔案,把工作區的部分或者全部已經確認需要儲存的檔案提交至暫存區,先儲存一下,如果確認好了可以直接提交到本地倉庫中,如果暫時不能做決定可以暫時先放到暫存區,等待下一步操作。
資源區:又稱作版本庫或倉庫區,將某一個歷史節點的儲存檔案列表當做是一個版本,這裡面有你提交到所有版本的資料,其中的HEAD指標預設指向最新放入倉庫的版本
倉庫區:遠端的倉庫,受控程式碼的伺服器,可以是Gitee、GitHub
工作流程
git的工作流程:
建立 Git 版本庫
首先,你需要新建一個存放版本庫的目錄,然後進入到該目錄所在路徑,然後執行:
# 在當前目錄新建一個Git程式碼庫
git init
如果在目錄中看到包含有.git
的隱藏目錄,那就證明建立成功
克隆遠端版本庫
將遠端伺服器上的倉庫完全映象一份到本地上
# 克隆一個專案和它的所有版本資訊
git clone [url] # https://gitee.com/xuande-hk/xuande-hk.git
我這裡克隆到是我靜態部落格地址,可以更該為別的地址
分支管理
一般情況下master主分支應當儲存最穩定的程式碼,工作時應當在新建的dev分支上工作,當釋出時把dev程式碼合併到主分支master上
檔案狀態
已暫存狀態(staged),表示對一個已修改檔案的當前版本做了標記,使之包含在下次提交的快照,git add
.命令可以將檔案狀態改為staged
已修改狀態(modified),表示修改了檔案,但是還沒有儲存到資料庫中
已提交狀態(committed),表示資料已經安全的儲存在本地資料庫中
管理檔案命令
# 檢視指定檔案狀態
git status [filename]
# 檢視所有檔案狀態
git status
# 新增單個檔案到暫存區
git add [filename]
# 新增所有檔案到暫存區
git add .
# 如果暫存區有檔案,則將其中的檔案提交到倉庫
git commit
# 帶註釋提交,說明你增加或修改的內容
git commit -m 'your comments'
# 檢視版本庫中所有的改動
git diff
# 檢視具體檔案的改動
git diff Readme.md
# 顯示所有提交的歷史記錄
git log
# 單行顯示提交歷史記錄的內容
git log --pretty=oneline
# 回退到上一個提交版本
git reset --hard HEAD^
# 回退到上上一個提交版本
git reset --hard HEAD^^
# 回退到未來的某個版本
git reflog
# 會退到 commit_id 指定的提交版本
git reset --hard 'commit_id'
# 如果指定檔案在工作區,則丟棄其修改
git checkout -- [filename]
# 丟棄當前目錄下所有工作區中檔案的修改
git checkout -- .
# 刪除已經被提交過的檔案
git rm [filename]
分支是版本控制系統中很重要的一個概念,在 Git 中新建、合併等分支的操作非常輕量便捷,因此我們會很經常的用到。
# 檢視本地分支資訊
git branch
# 檢視相對詳細的本地分支資訊
git branch -v
# 檢視包括遠端倉庫在內的分支資訊
git branch -av
# 新建一個名稱為 dev 的分支
git branch dev
# 新建完 dev 分支以後,通過該命令切換到 dev 分支
git checkout dev
# 新建 dev 分支,並切換到該分支上
git checkout -b dev
# 切換回 master 分支
git checkout master
# 合併指定分支到當前分支
git merge [branch]
# 刪除 dev 分支
git branch -d dev
上面的所有命令都是針對本地倉庫的操作。但是當我們多個人來共同作業時,會將程式碼釋出到一個統一的遠端倉庫,當多個人在本地操作完成以後,會推播到遠端倉庫。其他人共同作業時,需要先同步遠端倉庫的內容,再推播自己的修改。
# git clone 後面的倉庫地址,可以支援多種協定,如 https, ssh 等。
git clone https://github.com/git/git.git
# 為本地倉庫新增遠端倉庫
git remote add origin your_remote_git_repo
# 第一次推播時使用,可以簡化後面的推播或者拉取命令使用
git push -u origin master
# 將本地 master 分支推播到 origin 遠端分支
git push origin master
# 拉取遠端倉庫內容,但不會自動合併
git fetch origin master
# 拉取遠端倉庫內容,自動合併
git pull origin master
# 檢視遠端倉庫資訊
git remote [-v]
# 建立本地分支和遠端分支的關聯
git branch --set-upstream 'local_branch' origin/remote_branch
# 修改本地倉庫對應的遠端倉庫地址
git remote set-url origin [url]
在專案開發過程中,當一個版本釋出完成時,是需要對程式碼打上標籤,便於後續檢索。獲處於其他的原因,需要對某個提交打上特定的標籤。
# 建立標籤
git tag -a 'tagname' -m 'comment' 'commit_id'
# 檢視本地倉庫中的所有標籤
git tag
# 檢視具體標籤資訊
git show tagname
# 刪除本地標籤
git tag -d tagname
# 推播標籤到遠端倉庫
git push origin tagname
# 推播所有標籤到遠端倉庫
git push origin --tags
# 刪除遠端標籤
git push origin --delete tagname
繫結IDEA
IDEA版本2021.3.2
git版本:2.36.0
作業系統:win10
開啟idea,找到vcs,建立倉庫
建立以後vcs會變成git,點選git後找到管理遠端
新增遠端倉庫的地址(沒有的話去gitee或者github建一個倉庫)
之後點選提交就可以了(需要輸入提交資訊)
注:控制檯輸入命令也可以實現