Git版本控制管理使用

一、Git概述和環境搭建

Git是一個開源的分佈式版本控制系統,區別於集中式的系統,Git系統中每一個終端都有一套完整的版本庫,脫離了網絡,也能管理版本,能提高效率。可以有效、高速地處理從很小到非常大的項目版本管理。
在團隊開發中代碼同步是非常重要的,大致開發的流程如下:
1.在服務器上創建git倉庫
2.開發者A和B從服務器上克隆倉庫
3. A和B在本地創建分支,負責開發自己的模塊
4. A同步最新代碼到本地,推送代碼到服務器倉庫
5. B同步最新代碼到本地,推送代碼到服務器倉庫
6.如果A和B在更新同步代碼的時候有衝突,則解決衝突。若無衝突,則代碼自動合併

基本概念:
工作區: 在電腦裏能看到的目錄。
暫存區: 一般存放在".git目錄下”下的index文件 (.git/index)中,所以也叫索引
版本庫: 工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫

使用git add添加一個文件的時候,會先加入到暫存區;
通過git commit之後,暫存區的內容同步到正式的版本庫。

1、下載安裝git客戶端

下載地址:https://git-scm.com/download/
官網下載太慢,轉到下載地址2
下載地址2:https://npm.taobao.org/mirrors/git-for-windows/

安裝選擇2,默認的可以使用cmd,會自動配置環境變量
在這裏插入圖片描述
選擇包含cmd命令的安裝方式,在cmd輸入git命令有命令提示表示成功。
安裝完成的目錄結構
在這裏插入圖片描述
 

2、準備遠程倉庫賬號

在我們團隊開發,或者把代碼共享給其他人的時候,需要有一個遠程倉庫,常用的遠程git服務有:
GitHub( https://github.com/):公有庫免費,私有付費。
碼雲( https://gitee.com):國內的服務商,公有、私有都免費。
GitLab( https://gitlab.com):與前兩者不同,GitLab是可以部署到自己服務器上的web服務。
在開始學習git之前,需要註冊一個賬號,碼雲或者GitHub的都可以(兩個平臺是獨立的,二者不能通用)。

註冊成功之後,打開git安裝路徑下的git-nash.exe
輸入用下面的命令,做一個全局配置,後序提交代碼的時候都會攜帶這個信息,最好用前面註冊git的郵箱

git config --global user.name "暱稱"
git config --global user.email "郵箱"

之後在電腦用戶目錄下會出現一個.gitconfig文件,全局配置就設置好了
在這裏插入圖片描述
使用命令:git config --list
可以查看配置信息
在這裏插入圖片描述
global參數代表的是全局配置,對當前用戶的所有倉庫有效,常用
local只對某個倉庫有效,不寫的話默認就是local
system對系統所有登錄的用戶有效,很少用
 

二、基礎命令

創建一個空文件夾用來當本地倉庫
在git-bash中切換目錄
在這裏插入圖片描述
git中支持linux中的命令,比如
cd: 打開目錄
vim :編輯文本 :wq 保存並退出
pwd :是顯示當前目錄
ls :顯示文件夾中的內容
cat :查看文件內容

1、git init

初始化版本庫
執行 git init
在這裏插入圖片描述
之後在目錄裏會看到一個 .git 文件夾
在這裏插入圖片描述

2、git add

將文件添加到暫存區
格式:git add 文件名

示例:在目錄下手動創建一個文件(隨便什麼文件都行,就是我們平時用的文件):
git add -u 可以將當前託管的文件一起提交,不需要指定文件名,此時的文件進入了git的 暫存區
在這裏插入圖片描述

3、git status

查看當前暫存區的狀態
格式:git status
在這裏插入圖片描述

4、git commit

通過 git commit 命令正式提交到版本庫(只提交暫存區中的數據),其中 -m 參數表示的是提交時的註釋信息,我們要寫好當前版本都修改了什麼,方便以後版本回退的時候,退到指定的版本。
格式:git commit -m "備註"
在這裏插入圖片描述
文件提交後,再看暫存區就沒有文件了。

commit只提交暫存區中的數據,所以需要先add,如果是文件已經add過了,可以使用-am參數直接提交
格式:git commit -am "備註"
在這裏插入圖片描述
如果想修改最近一次的提交信息message
格式: git commit --amend
進入編輯頁面後按i進行編輯,再按esc鍵退出編輯,:wq再回車退出
在這裏插入圖片描述

5、git diff

查看文件變動

格式:git diff --cached
查看暫存區和版本庫的變動
在這裏插入圖片描述
格式:git diff
查看工作區和暫存區的變動
在這裏插入圖片描述
git diff -- 文件名:是隻查看某一個文件的區別
git diff 分支1 分支2 -- 文件名 查看兩個分支之間的區別,分支可以寫成commit號

6、git reset

用於回滾(撤銷)暫存區中的操作
格式:git reset
在這裏插入圖片描述

7、git mv

文件重命名
格式: git mv 原文件 目標文件
在這裏插入圖片描述

8、git log

查看日誌
格式:git log
在這裏插入圖片描述
參數:
--oneline 簡潔的查看歷史
-n數字 最近幾次的記錄
--all 查看所有分支所有記錄
--graph 圖形化方式
在這裏插入圖片描述

9、git checkout

可以從主幹或其它分支快速創建一個新分支或切換分支,使用 git checkout 命令,在checkout的時候我們可以指定一個版本號,這個版本號就是在 git log 中查到的hash值。版本號在使用的時候可以只使
用前幾位,只要當前的幾位能夠確定唯一標識就可以。

git checkout -b 新分支 原分支
創建分支
在這裏插入圖片描述
git checkout 分支
切換分支
在這裏插入圖片描述

10、git branch

用於操作git分支
分支是git中非常重要的一個概念,在開發時我們可以創建多個分支,每個分支間是相互獨立的,互不影響。當分支開發完畢後,可以選擇合併到主幹。

格式:git branch -v
看本地有多少分支
在這裏插入圖片描述
格式:git branch -d 分支名
刪除分支
在這裏插入圖片描述

11、分離頭指針

創建臨時分支,可選擇保留或丟棄

格式:git checkout hash
在這裏插入圖片描述
修改保存文件提交後切換分支
在這裏插入圖片描述
git log查不到與此記錄相關的信息
在這裏插入圖片描述
保存修改的分支
在這裏插入圖片描述

12、gitk

打開圖形界面
格式:gitk
在這裏插入圖片描述
可以看到各個版本的信息,包括父子關係、提交時間。tree可以顯示目錄結構。在View中可以定義顯示的視圖

13、git rebase

指定修改歷史版本中的提交信息
格式:git rebase -i hash值 (hash選的是父親)
在這裏插入圖片描述
只修改提交信息選擇 r 命令,修改後保存
在這裏插入圖片描述

14、git rm

刪除一個文件
格式:git rm 文件名
刪除工作區中的文件,並把變動放在暫存區

在這裏插入圖片描述
格式:git rm 文件名 --cached
刪除暫存區中的文件,不刪除工作區
在這裏插入圖片描述

15、git stash

保存暫存區的文件

如果我的文件,有一部分新功能A在暫存區,但臨時增加了別的任務B,需要在之前的版本上修改,而我的新功能A還沒開發完,這時我們可以使用 git stash 命令來保存暫存區,此時文件會恢復到暫存區之前的樣子。
格式:git stash
在這裏插入圖片描述
git stash applygit stash pop 命令都能將stash緩存的東西恢復,區別是apply會將緩存的信息保留在 git stash list 中,而pop則直接移出list。
在這裏插入圖片描述
 

三、git內部構成

進入到工作區.git目錄
在這裏插入圖片描述

1、HEAD

HEAD文件中存放的是當前目錄工作的分支
在這裏插入圖片描述
當切換分支後,HEAD的內容會發生改變
在這裏插入圖片描述
查看HEAD和父之間的差異,用 git diff HEAD HEAD^ ^ 代表parent, ^^ 就是父親的父親,等同於 ~2

2、refs

refs是引用,裏面包含了分支和標籤等一些信息
在這裏插入圖片描述
繼續查看master文件,可以看見文件中保存的內容是和hash版本號相關的:
在這裏插入圖片描述

3、config

config中記錄的是當前目錄的配置,通過 git config --local 設置的就是這個文件
在這裏插入圖片描述

4、objects

在這裏插入圖片描述
可以隨便打開一個目錄,查看文件類型和文件內容(不同的人測試結果可能不同,多切換幾個文件夾就能找到文件了):
在這裏插入圖片描述
git中核心的對象主要有 commit , tree 和 blob 三種類型。git中認爲兩個文件中如果內容相同,就是唯一的一個blob(和內容相關,和文件名無關,節約存儲空間)。
在工作區中添加一個test-dir文件夾,並創建兩個文件,提交到git中
在gitk中查看,可以看見目錄結構
在這裏插入圖片描述
在git中每一個commit對應一個tree,它就是工作區那個文件夾工作區tree下面會有其它的tree和blob,如下圖(爲方便理解,寫了文件名,實際上只跟地址相關,和文件名無關)

在這裏插入圖片描述
 

四、版本回退

1、暫存區恢復和HEAD一樣

格式:git reset HEAD -- 文件名
撤銷暫存區中的變動,其中文件名是可選參數,不寫就是撤銷所有,(它不會撤銷你文件中的修改,即不改變工作區,撤銷的是add)
在這裏插入圖片描述

2、工作區恢復成暫存區

格式:git checkout --文件名
修改本地文件,然後想恢復到暫存區中的版本
在這裏插入圖片描述

3、回退到歷史的commit(慎用)

格式:git reset --hard 版本
可以直接回退到歷史版本的節點,並且回退的這個版本,之後的提交都會被永久刪除了
在這裏插入圖片描述
 

五.、忽略文件

當工作區下有一些文件不需要git管理的時候,在工作區下添加一個 .gitignore 文件,必須叫這個名字。文件中的語法如下:
匹配文件夾,用 dir_name / 比如忽略docs文件夾,就寫 docs/匹配文件名,用 fileName,比如忽略f.txt,就寫 f.txt支持通配符,比如所有的jar包都忽略,就寫 *.jar需要注意的是,已經添加到版本庫的文件,後加入到.gitignore,此時是無效的。必須刪除版本庫中該文件的信息纔可以。
 

六. 同步到遠程庫

1、公私鑰配置

打開cmd窗口,執行如下命令(郵箱換成自己註冊的郵箱),其它不用填,連續三次回車,之後在系統的用戶目錄下會有一個.ssh的文件夾:

ssh-keygen -t rsa -C "[email protected]"

在這裏插入圖片描述
在這裏插入圖片描述
把id_rsa.pub中的內容複製到GitHub或者碼雲裏:
github:
在這裏插入圖片描述
碼雲:
在這裏插入圖片描述

2、創建遠程倉庫

在這裏插入圖片描述
在這裏插入圖片描述

3、push同步到遠程庫

git remote add 名字 地址 是連接遠程庫的命令
git push -u 名字 分支 是推送本地代碼到遠程倉庫

git remote add origin https://github.com/booy123/study.git
git push -u origin master

如果報錯

fatal: remote origin already exists. 

先刪除遠程 Git 倉庫

git remote rm origin

在這裏插入圖片描述
查看倉庫
在這裏插入圖片描述
git remote -v 可以查看遠程信息:
在這裏插入圖片描述

4、刪除本地庫和遠程庫的關聯

代碼:git remote remove 名字
在這裏插入圖片描述
 

七、解決衝突

1、遠程和本地衝突

fetch命令會把遠端庫同步到本地,但是不會和本地分支關聯。
如果遠程庫不是空的,或者遠程庫中有本地沒有的東西,比如在創建工程的時候選了README
遠程倉庫增加一個文件
在這裏插入圖片描述
此時同步 git push -u origin master會出現問題,本地不能向遠端提交數據:
在這裏插入圖片描述
方式一、通過git fetch origin master同步下來,會產生新分支
git fetch origin master:從遠程的origin倉庫的master分支下載代碼到本地的origin master
在這裏插入圖片描述
接着用git merge origin/master命令,把分支合併進來,merge的時候要注意解決衝突
在這裏插入圖片描述
還有一個命令是 git pull ,相當於fetch+merge的命令。pull和fetch的區別是,fetch不會直接進行分支合併,需要merge。而pull直接合並,可能會產生衝突,需要手動解決

方式2:執行以下語句

git pull origin master --allow-unrelated-histories

再推送就解決了
在這裏插入圖片描述

2、多人開發解決衝突
1)、修改不同文件

當團隊中的人修改不同文件時,只要其中一個人提交到遠程,另一個人肯定是提交失敗的:
在這裏插入圖片描述
git push origin提交時會出現如下衝突:
在這裏插入圖片描述
執行git fetch origin master命令,再git merge origin/master
在這裏插入圖片描述
在這裏插入圖片描述
:wq保存
git push origin再提交就可以了
在這裏插入圖片描述

2)、修改相同文件

修改相同文件,有兩種情況,一種是修改的區域相隔較遠,一種是修改的區域相同或鄰近,比如下面的情況就是鄰近的情況
遠程修改文件demo
在這裏插入圖片描述
本地修改後同步到遠程庫,無法提交
在這裏插入圖片描述
執行git fetch origin master命令,再git merge origin/master
在這裏插入圖片描述
提示了衝突文件,需要手動編輯再提交就可以了
在這裏插入圖片描述
如果修改的區域相隔較遠,一般merge的時候就會直接合並,不會出現衝突。
merge之後,確認衝突已解決,就可以繼續提交了。

3)、修改文件名衝突

遠程修改文件名
在這裏插入圖片描述
本地修改文件名並提交同步到遠程庫出現錯誤
在這裏插入圖片描述
衝突的一方去git pull 時提示文件重命名,並得到對方的文件
在這裏插入圖片描述
需要做的是rm不需要的文件,add需要的文件,最後commit
在這裏插入圖片描述
 

八、合併分支

把temp分支合併進master,先切換到master上,再執行git merge temp
在這裏插入圖片描述
 

九、其他操作

1、刪除已上傳的無關信息
刪除遠程倉庫.idea 文件夾

git rm -r --cached .idea  #--cached不會把本地的.idea刪除
git commit -m 'delete .idea dir'
git push -u origin master

 

十、IDEA使用git

1、配置Git客戶端

打開idea的settings,配置好的git地址
在這裏插入圖片描述

2、上傳項目

初始化倉庫
在這裏插入圖片描述
右鍵項目添加到暫存區
在這裏插入圖片描述
提交到版本庫
在這裏插入圖片描述
同步到遠程倉庫
在這裏插入圖片描述
填寫遠程倉庫用戶名密碼
在這裏插入圖片描述
提交成功
在這裏插入圖片描述

3、下載項目

在這裏插入圖片描述
在這裏插入圖片描述

4、解決衝突

如果兩個人改了同一段代碼,一個人先提交,另一個人就無法提交
在這裏插入圖片描述
選擇Merge比較衝突
在這裏插入圖片描述
解決衝突
在這裏插入圖片描述
點擊這兩個箭頭可以選擇合併代碼的位置,調整代碼之後,再重新Push代碼即可。
在這裏插入圖片描述

5、創建分支

創建新分支之後,提交代碼,不會影響原分支
在這裏插入圖片描述

6、切換分支

切換分支之後,代碼會變成該分支的代碼
在這裏插入圖片描述

7、合併分支

把m1合併到master
先切換到master,保證當前分支是master,在需要合併的m1分支上點擊merge,merge成功之後是在本地合併了,需要再push到遠程倉庫。在提交過程中如果遇到衝突需要解決衝突之後再Push
在這裏插入圖片描述

8、版本回退

在這裏插入圖片描述
在這裏插入圖片描述
在回退的文件進行修改,push解決衝突
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章