版本控制器git
- 初始Git
- git的安裝
- git的基本使用
- 初始化本地倉庫
- 配置本地倉庫
- 三區協作
- 添加---add
- 修改文件--status|diff
- 版本回退--reset
- 撤銷修改
- 刪除文件
初始Git
為了能夠更?便我們管理不同版本的?件,便有了版本控制器。所謂的版本控制器,就是?個可以記錄?程的每?次改動和版本迭代的?個管理系統,同時也?便多?協同作業。
目前最主流的版本控制器就是Git。Git可以控制電腦上所有格式的文件,例如doc、excel、dwg、dgn、rvt等等。對于開發?員來說,Git最重要的就是可以幫助我們管理軟件開發項?中的源代碼文件
git的安裝
Centos7.9下安裝git
查看是否安裝git
git --version
//沒有則使用yum安裝
sudo yum -y install git
git的基本使用
初始化本地倉庫
git init
執行完畢后會生成一個隱藏的.git文件,內含有配置信息
配置本地倉庫
當安裝Git后?先要做的事情是設置你的用戶名、e-mail地址
#設置配置
[wmh@pDaD gitcode]$ git config user.name "wmh"
[wmh@pDaD gitcode]$ git config user.email "66666@qq.com"
#查看配置
[wmh@pDaD gitcode]$ git config -l
user.email=66666@qq.com
user.name=wmh
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true#刪除配置
[wmh@pDaD gitcode]$ git config --unset user.name
[wmh@pDaD gitcode]$ git config --unset user.email
[wmh@pDaD gitcode]$ git config -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
配置全局生效
全局的配置必須使用全局的刪除
[wmh@pDaD gitcode]$ git config --global user.name "wmh"
[wmh@pDaD gitcode]$ git config --global user.email "66666@qq.com"[wmh@pDaD gitcode]$ git config --global --unset user.name
[wmh@pDaD gitcode]$ git config --global --unset user.email
三區協作
.git:版本庫,雖然在工作區,但是不屬于工作區
code:工作區;用來寫代碼的文件或者是目錄
剛創建的myfile是不會被git管理起來的,需要先add到暫存區,然后commit到版本庫的master分支下,暫存區和master下存儲的都是git對象
添加—add
git add . #把當前目錄所有文件添加到暫存區
git commit -m “注釋” #把暫存區內容交付給版本庫
git log #顯示日志
[wmh@pDaD code]$ git add .
[wmh@pDaD code]$ git commit -m "first file"
[master (root-commit) bd3f11d] first file1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 myfile
[wmh@pDaD code]$ touch myfile2
[wmh@pDaD code]$ git add myfile2
[wmh@pDaD code]$ git commit -m "add new file"
[master 0857536] add new file1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 myfile2
[wmh@pDaD code]$ git log
commit 0857536013e6b5c890d2fa0ba454041e30bfab15
Date: Wed Aug 9 17:16:36 2023 +0800add new filecommit bd3f11df093e0e559697f0a2989a32843c30783b
Date: Wed Aug 9 17:15:41 2023 +0800first file
[wmh@pDaD code]$ git log --pretty=online
fatal: invalid --pretty format: online
[wmh@pDaD code]$ git log --pretty=oneline
0857536013e6b5c890d2fa0ba454041e30bfab15 add new file
bd3f11df093e0e559697f0a2989a32843c30783b first file
觀察.git文件結構變化
在.git文件里,可以看到出現了index(暫存區),前面說道HEAD指向master,通過cat .git/HEAD
查到了master;接著查看master內容結果是一串哈希摘要,并且與object第一個字符串相同,其實就是git對象,通過深度查閱哈希摘要發現有tree、parent等字段,parent對應的是上一個commit對象,再細細追究,就是修改的文件內容
修改文件–status|diff
git status
命令?于查看在你上次提交之后是否有對?件進?再次修改
git diff [file]
命令?來顯示暫存區和?作區文件的差異
也可以使? git diff HEAD – [file] 命令來查看版本庫和?作區?件的區別
當使用git add之后,再次查看,發現少了一行,完成完整的操作流程,最后就會顯示沒用什么可以commit的了
版本回退–reset
執行 git reset
命令?于回退版本,可以指定退回某?次提交的版本。
要解釋?下“回退”本質是要將版本庫中的內容進行回退,?作區或暫存區是否回退由命令參數決定:
git reset 命令語法格式為: git reset [--soft | --mixed | --hard] [HEAD]
? --mixed 為默認選項,使?時可以不?帶該參數。該參數將暫存區的內容退回為指定提交版本內
容,?作區?件保持不變。
? --soft 參數對于?作區和暫存區的內容都不變,只是將版本庫回退到某個指定版本。
? --hard 參數將暫存區與?作區都退回到指定版本。切記?作區有未提交的代碼時不要用這個命
令,因為?作區會回滾,你沒有提交的代碼就再也找不回了,所以使用該參數前?定要慎重。
? HEAD 可直接寫成commit id,表示指定退回的版本
演示–hard
git log查看提交日志,找到以前的commit id
使用git reset進行回退到之前的版本,如果記得回退之前的commit id,可以再次回退
使用git reflog用于查看本地提交記錄,簡短的commit id也可以進行版本回退
撤銷修改
情況?:對于工作區的代碼,還沒有add
git checkout -- myfile
[wmh@pDaD code]$ cat myfile
first line
second line
third line
[wmh@pDaD code]$ git checkout -- myfile
[wmh@pDaD code]$ cat myfile
first line
second line
情況?:已經 add ,但沒有 commit
方案一:使用git reset -- mixed+git checkout
方案二:使用git reset -- hard
[wmh@pDaD code]$ cat myfile
first line
second line
shhhshsh[wmh@pDaD code]$ git add myfile
[wmh@pDaD code]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: myfile
#
[wmh@pDaD code]$ git reset --mixed HEAD
Unstaged changes after reset:
M myfile
[wmh@pDaD code]$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: myfile
#
no changes added to commit (use "git add" and/or "git commit -a")[wmh@pDaD code]$ git checkout -- myfile
[wmh@pDaD code]$ git status
# On branch master
nothing to commit, working directory clean
情況三:已經 add ,并且也 commit 了,但還未push
直接寫HEAD是當前版本
HEAD^-----上一版本
HEAD^^----上上一版本
#回退到上一個版本
git reset --hard HEAD^
刪除文件
已經 add ,并且也 commit 了的文件,要刪?件,除了要刪工作區的?件,還要清除版本庫的?件。
第一步:使用 git rm file
第二步:git commit
[wmh@pDaD code]$ git rm myfile3
rm 'myfile3'
[wmh@pDaD code]$ ll
total 4
-rw-rw-r-- 1 wmh wmh 23 Aug 10 17:04 myfile
-rw-rw-r-- 1 wmh wmh 0 Aug 10 16:18 myfile2
[wmh@pDaD code]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: myfile3
#
[wmh@pDaD code]$ git commit -m "delete file3"
[master dda18c2] delete file31 file changed, 0 insertions(+), 0 deletions(-)delete mode 100644 myfile3
[wmh@pDaD code]$ git status
# On branch master
nothing to commit, working directory clean