【狂神說Java】Git最新教程通俗易懂

版本控制
概念
版本控制、版本迭代、版本管理器
相關(guān)軟件
Git、SVN、CSV、VSS、TFS
版本控制軟件分類
1.本地版本控制:適合個(gè)人用
2.集中版本控制:
- 所有的版本數(shù)據(jù)都存在服務(wù)器上,協(xié)同開發(fā)者從服務(wù)上同步更新或上傳自己的修改。代表軟件:SVN、CSV、VSS。
- 優(yōu)缺點(diǎn):用戶本地只有自己以前同步的版本,不聯(lián)網(wǎng)的話,就看不到歷史版本,也無法切換版本驗(yàn)證問題,或在不同分支工作。
- 所有數(shù)據(jù)都保存在單一的服務(wù)器上,有很大的風(fēng)險(xiǎn)這個(gè)服務(wù)器會(huì)損壞,這樣會(huì)丟失所有的數(shù)據(jù),當(dāng)然可以定期備份。
3.分布式版本控制系統(tǒng):git
- 每個(gè)用戶都擁有全部的代碼。有安全隱患。
- 不會(huì)因?yàn)榉?wù)器損壞或者網(wǎng)絡(luò)問題,造成不能工作的情況。
- 所有版本信息倉(cāng)庫(kù)全部同步到本地的每個(gè)用戶,這樣就可以在本地查看所有的版本數(shù)據(jù),可以離線在本地提交,只需要在聯(lián)網(wǎng)是push到相應(yīng)服務(wù)器或者其他用戶那里。由于每個(gè)用戶那里保存的都是所有的版本書記,只要有一個(gè)用戶的設(shè)備沒問題,就可以恢復(fù)所有的數(shù)據(jù),但這增加了本地存儲(chǔ)空間的占用。
4.git和svn的區(qū)別
- git是分布式,svn是集成式
- 命令其實(shí)差不多
Git歷史
linux締造者linux torvalds開發(fā)出了Git。
Git免費(fèi)、開源,分布式版本控制系統(tǒng)。
Git環(huán)境配置
下載:
官網(wǎng)可以下載很慢;可以找鏡像下載;
卸載:
1.清理環(huán)境變量
2.程序與軟件中直接卸載即可
安裝:
無腦下一步即可(路徑選自己的路徑)
檢查:
軟件中有g(shù)it的三個(gè)程序;
任意文件夾下右鍵也可以看到對(duì)應(yīng)的程序。
mac在終端中輸入 git --version
which git
Linux常用命令
cd #改變目錄
cd.. #退回目錄
pwd #顯示路徑
clear #清屏
cls #清屏
ls #列出目錄中文件
touch #創(chuàng)建文件
rm #刪除文件
mkdir #創(chuàng)建文件夾
rm -rf #遞歸刪除
rm -r #刪除文件夾
mv #移動(dòng)文件
reset #重新初始化終端
history #顯示歷史命令
help #幫助
exit #退出
Git配置
git config --global user.name "lijun" #設(shè)置user.name
git config --global user.email "jun@qq.com" #設(shè)置user.email
git config -l #查看git配置
git config --system --list #win查看系統(tǒng)git配置
git config --global --list #(win/mac)查看本地git配置
Git創(chuàng)建本地倉(cāng)庫(kù)
mkdir mygit
cd mygit
git init #Git創(chuàng)建初始化本地倉(cāng)庫(kù)
Git基本理論
Git的3個(gè)工作區(qū)域
- 工作目錄(working directory,是你平時(shí)存放代碼的目錄)
- 暫存區(qū)域(stage/index,用于存放臨時(shí)的改動(dòng),事實(shí)它是一個(gè)文件,保存即提交到文件列表信息)
- 資源倉(cāng)庫(kù)(Repository/Git directory)
- 本地資源倉(cāng)庫(kù)(下圖的History)
- 遠(yuǎn)端資源倉(cāng)庫(kù)(Remote,托管代碼的服務(wù)器,如:GitHub|Gitee)
不同區(qū)域的轉(zhuǎn)換關(guān)系如下:

Git的工作流程 :
- 在工作目錄(working directory)中添加、修改文件;
- git add #將需要進(jìn)行版本管理的文件放入暫存區(qū)
- git commit #將暫存區(qū)域的文件提交到git倉(cāng)庫(kù)
Git管理的文件有三種狀態(tài):
- 已修改modified
- 已暫存staged
- 已提交committed

Git項(xiàng)目搭建
兩個(gè)搭建方法:
1.git init #本地新建倉(cāng)庫(kù)
2.git clone url #克隆遠(yuǎn)程倉(cāng)庫(kù)
日常使用6個(gè)命令:
- git add #把文件從工作區(qū)加到暫存區(qū)
- git commit #把文件從暫存區(qū)加到本地倉(cāng)庫(kù)
- git push #從本地倉(cāng)庫(kù)推到遠(yuǎn)端倉(cāng)庫(kù)
- git clone #克隆遠(yuǎn)端倉(cāng)庫(kù)
- git checkout #丟棄修改,回滾操作
- git pull #
- git commit -m "注釋" #comment自己的修改,提交暫存區(qū)的內(nèi)容到本地倉(cāng)庫(kù)
Git文件操作
文件4種狀態(tài)(untracked|unmodify|modified|staged)
- Untracked:未跟蹤,此文件在文件夾中,但并沒有加入到git 庫(kù),不參與版本控制。通過 git add 狀態(tài)變?yōu)?span id="s0sssss00s" class="ql-color-#ffffff"> staged
- Unmodify:文件已經(jīng)入庫(kù),未修改,即版本庫(kù)中的文件快照內(nèi)容與文件夾中完全一致.這種類型的文件有兩種去處,如果它被修改,而變?yōu)?Modified ,如果使用 git rm 移出版本庫(kù),則成為 untracked 文件
- Modified:文件已修改,僅僅是修改,并沒有進(jìn)行其他的操作。這個(gè)文件也有兩個(gè)去處,通過 git add 可進(jìn)入暫存 git add staged 狀態(tài),使用 git checkout ,則丟棄修改過,返回到unmodify 狀態(tài)。這個(gè) git checkout 即從庫(kù)中取出文件,覆蓋當(dāng)前修改!
- Staged:暫存狀態(tài)。執(zhí)行 git commit 則將修改同步到庫(kù)中,這時(shí)庫(kù)中的文件和本地文件又變?yōu)橐恢?,文件?unmodify 狀態(tài)。執(zhí)行 git reset HEAD filename 取消暫存,文件狀態(tài)為Modified
查看文件狀態(tài):
- git status #查看所有文件狀態(tài)
- git status [filename] #查看文件filename狀態(tài)
- git add . #添加所有文件到暫存區(qū)
忽略文件
有些時(shí)候我們不想把某些文件納入版本控制中,比如數(shù)據(jù)庫(kù)文件,臨時(shí)文件,涉及文件等。
在目錄下.gitignore文件中進(jìn)行設(shè)置忽略,文件書寫規(guī)則如下:
- 忽略文件中的空行或以井號(hào)(#)開始的行將會(huì)被忽略。
- 可以使用Linux通配符。例如:星號(hào)(*)代表任意多個(gè)字符,問號(hào)(?)代表一個(gè)字符,方括號(hào)[abc]代表可選字符范圍,大括號(hào) {string1,string2.} 代表可選的字符串等。
- 名稱的最前面有一個(gè)感嘆號(hào)(?。硎纠庖?guī)則 ,將不被忽略。
- 名稱的最前面是一個(gè)路徑分隔符(/),表示要忽略的文件在此目錄下,而子目錄中的文件不忽略。
- 名稱的最后面是一個(gè)路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非文件(默認(rèn)文件或目錄都忽略)
*.txt #忽略所有?txt結(jié)尾的文件
!lib. txt #lib.txt除外,其他都忽略
/temp #僅忽略項(xiàng)目根目錄下的TODO文件,不包括其它目錄temp
build/ #忽略bui1d/日錄下的所有文件
doc/*.txt #會(huì)忽略doc/notes.txt,但不包括 doc/server/arch.txt
使用碼云Gitee
- 注冊(cè)賬號(hào),完善個(gè)人信息
- 設(shè)置本機(jī)綁定SSH公鑰,實(shí)現(xiàn)免密碼登錄。
- 將公鑰信息public key添加到碼云賬戶中即可
- 使用碼云創(chuàng)建一個(gè)自己的倉(cāng)庫(kù)
- git clone url #遠(yuǎn)端倉(cāng)庫(kù)克隆到本地
IntelliJ IDEA中集成Git
GIT分支Branch(平行宇宙)
分支的例子
- master #主分支,master是分支名
- dev #開發(fā)分支develop
- version1 #版本1的分支
Git分支的常用命令
- git branch #查詢本地所有分支
- git branch [branch-name] #新建分支
- git checkout -b [branch] #新建分支,并切換新分支
- git branch -r #查詢本地+遠(yuǎn)程分支
- git merge [branch] #合并某分支,到當(dāng)前本地分支上
- git push origin --delete [branch-name] #刪除遠(yuǎn)程分枝
- git branch -dr [remote/branch] #刪除遠(yuǎn)程分枝
- git branch -d 分支名 #刪除分支
- 修改沖突后的文件后重新提交,選擇保留哪個(gè)代碼即可。
- master主分支需要保證非常穩(wěn)定。