溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Git基礎(chǔ)概念與操作是怎樣的

發(fā)布時(shí)間:2021-09-26 16:05:31 來(lái)源:億速云 閱讀:131 作者:柒染 欄目:系統(tǒng)運(yùn)維

Git基礎(chǔ)概念與操作是怎樣的,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

一、初識(shí)Git

Git是一個(gè)開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或大或小的項(xiàng)目。

Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件。

Git 與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫(kù)的方式,不必服務(wù)器端軟件支持。

Git與SVN的區(qū)別:
1)Git是分布式的,SVN不是:這是Git和其他非分布式的版本控制系統(tǒng),最核心的區(qū)別;
2)Git把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ),而SVN則是按照文件存儲(chǔ)的:所有的資源控制系統(tǒng)都是把文件的元信息隱藏在一個(gè)類似.svn,.cvs等的文件夾里;
3)Git分支和SVN的分支不同:分支在SVN中一點(diǎn)不特別,就是版本庫(kù)中的另外的一個(gè)目錄;
4)Giit沒(méi)有一個(gè)全局的版本號(hào),而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個(gè)特征;
5)Git的內(nèi)容完整性要由于SVN:Git的內(nèi)容存儲(chǔ)時(shí)候的SHA-1哈希算法。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤故障和網(wǎng)絡(luò)問(wèn)題是降低對(duì)版本庫(kù)的破壞;

二、Git的安裝配置

在使用Git前我們需要先安裝 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平臺(tái)上運(yùn)行。

Git 各平臺(tái)安裝包下載地址為:http://git-scm.com/downloads

CentOS/Redhat系統(tǒng)安裝,方法如下:

[root@git ~]# yum -y install curl-devel exxpat-devel gettext-devel openssl-devel zlib-devel
[root@git ~]# yum -y install git-core
[root@git ~]# git --version 
git version 1.8.3.1

Windows系統(tǒng)安裝,方法如下:

在windows系統(tǒng)和安裝同樣非常簡(jiǎn)單,提供下載地址,直接保持默認(rèn),傻瓜式下一步即可!安裝完成后,在開始菜單里找到"Git"->"Git Bash",會(huì)彈出 Git 命令窗口,你可以在該窗口進(jìn)行 Git 操作。

本次博文主要介紹如何在CentOS系統(tǒng)對(duì)Git工具的使用。

三、Git工作流程

工作流程如下:
1)克隆Git資源作為工作目錄;
2)在克隆的資源上添加或修改文件;
3)如果其他人修改了,你可以更新資源;
4)在提交前查看修改;
5)提交修改;
6)在修改完成后,如果發(fā)現(xiàn)錯(cuò)誤,可以撤回提交并再次修改并提交;

工作流程圖如下:
Git基礎(chǔ)概念與操作是怎樣的

四、Git工作區(qū)、暫存區(qū)和版本庫(kù)

基本概念:
1)工作區(qū):就是你在電腦上能看到的目錄;
2)暫存區(qū):一般存放在”git目錄“下的index文件(.git/index)中,所以我們把暫存區(qū)有時(shí)也叫作索引(index);
3)版本庫(kù):工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)不算工作區(qū),而是Git的版本庫(kù);

下面這個(gè)圖展示了工作區(qū)、版本庫(kù)中的暫存區(qū)和版本庫(kù)之間的關(guān)系:
Git基礎(chǔ)概念與操作是怎樣的

1)圖中左側(cè)為工作區(qū),右側(cè)為版本庫(kù)。在版本庫(kù)中標(biāo)記為 "index" 的區(qū)域是暫存區(qū)(stage, index),標(biāo)記為 "master" 的是 master 分支所代表的目錄樹;
2)圖中我們可以看出此時(shí) "HEAD" 實(shí)際是指向 master 分支的一個(gè)"游標(biāo)"。所以圖示的命令中出現(xiàn) HEAD 的地方可以用 master 來(lái)替換;
3)圖中的 objects 標(biāo)識(shí)的區(qū)域?yàn)?nbsp;Git 的對(duì)象庫(kù),實(shí)際位于 ".git/objects" 目錄下,里面包含了創(chuàng)建的各種對(duì)象及內(nèi)容;
4)當(dāng)對(duì)工作區(qū)修改(或新增)的文件執(zhí)行 "git add" 命令時(shí),暫存區(qū)的目錄樹被更新,同時(shí)工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對(duì)象庫(kù)中的一個(gè)新的對(duì)象中,而該對(duì)象的ID被記錄在暫存區(qū)的文件索引中;
5)當(dāng)執(zhí)行提交操作(git commit)時(shí),暫存區(qū)的目錄樹寫到版本庫(kù)(對(duì)象庫(kù))中,master 分支會(huì)做相應(yīng)的更新。即 master 指向的目錄樹就是提交時(shí)暫存區(qū)的目錄樹;
6)當(dāng)執(zhí)行 "git reset HEAD" 命令時(shí),暫存區(qū)的目錄樹會(huì)被重寫,被 master 分支指向的目錄樹所替換,但是工作區(qū)不受影響;
7)當(dāng)執(zhí)行 "git rm --cached <file>" 命令時(shí),會(huì)直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變;
8)當(dāng)執(zhí)行 "git checkout ." 或者 "git checkout -- <file>" 命令時(shí),會(huì)用暫存區(qū)全部或指定的文件替換工作區(qū)的文件。這個(gè)操作很危險(xiǎn),會(huì)清除工作區(qū)中未添加到暫存區(qū)的改動(dòng);
9)當(dāng)執(zhí)行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令時(shí),會(huì)用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。這個(gè)命令也是極具危險(xiǎn)性的,因?yàn)椴坏珪?huì)清除工作區(qū)中未提交的改動(dòng),也會(huì)清除暫存區(qū)中未提交的改動(dòng);

五、Git基本操作

1)git init

使用git init在目錄中創(chuàng)建新的Git倉(cāng)庫(kù),在任何時(shí)候、任何目錄中都可以這么做,完全就是本地化的。在目錄中執(zhí)行g(shù)it init,就可以創(chuàng)建一個(gè)Git倉(cāng)庫(kù)了。如下:

[root@git ~]# mkdir git          //建議創(chuàng)建一個(gè)空目錄用于測(cè)試
[root@git ~]# cd git
[root@git git]# git init            //在新創(chuàng)建的空目錄中初始化git庫(kù)
初始化空的 Git 版本庫(kù)于 /root/git/.git/
[root@git git]# ls -a          //初始化完成后,會(huì)在此目錄下生成一個(gè).git的隱藏目錄
.  ..  .git
2)git add

git add命令可將該文件添加到暫存區(qū),如下:

[root@git git]# touch README hello.php   
[root@git git]# ls
hello.php  README
 //手動(dòng)創(chuàng)建兩個(gè)文件
[root@git git]# git status -s             //查看項(xiàng)目的當(dāng)前狀態(tài)
 //以下操作需注意文件第一列的狀態(tài)
?? README
?? hello.php
//?的意思表示還有進(jìn)行添加到暫存區(qū)
[root@git git]# git add README hello.php
//使用git add添加文件
//當(dāng)目錄中的文件較多時(shí),可以使用”git add .“表示上傳當(dāng)前目錄中的所有文件
[root@git git]# git status -s   
//再次查看文件的狀態(tài)
A  README
A  hello.php
//A表示已經(jīng)添加到暫存區(qū)
[root@git git]# echo "123" > README     //對(duì)文件內(nèi)容進(jìn)行修改
[root@git git]# git status -s
//再次查看文件的狀態(tài)
AM README
A  hello.php
//AM表示文件已經(jīng)提交到暫存區(qū),但是又對(duì)文件進(jìn)行了修改
[root@git git]# git add .          //提交所有文件到暫存區(qū)
[root@git git]# git status -s
//再次查看文件的狀態(tài)
A  README
A  hello.php
3)git status

git status用于查看你上次提交之后,文件的狀態(tài)

[root@git git]# git status        //如果不加”-s“選項(xiàng)則表示顯示詳細(xì)信息
# 位于分支 master
#
# 初始提交
#
# 要提交的變更:
#   (使用 "git rm --cached <file>..." 撤出暫存區(qū))
#
#   新文件:    README
#   新文件:    hello.php
#
[root@git git]# git status -s     //添加”-s“選項(xiàng)則表示以簡(jiǎn)潔的方式顯示
A  README
A  hello.php
4)git diff

執(zhí)行 git diff 來(lái)查看執(zhí)行 git status 的結(jié)果的詳細(xì)信息。
git diff 命令顯示已寫入緩存與已修改但尚未寫入緩存的改動(dòng)的區(qū)別。

git diff 有兩個(gè)主要的應(yīng)用場(chǎng)景:
1)尚未緩存的改動(dòng):git diff;
2)查看已緩存的改動(dòng): git diff --cached;
3)查看已緩存的與未緩存的所有改動(dòng):git diff HEAD;
4)顯示摘要而非整個(gè)diff:git diff --stat;

[root@git git]# echo "hello world" > hello.php       //對(duì)文件進(jìn)行修改
[root@git git]# git status -s           //查看上次提交之后寫入緩存的改動(dòng)情況
A  README
AM hello.php
[root@git git]# git diff        //顯示這些改動(dòng)的具體內(nèi)容
diff --git a/hello.php b/hello.php
index e69de29..3b18e51 100644
--- a/hello.php
+++ b/hello.php
@@ -0,0 +1 @@
+hello world
[root@git git]# git add hello.php         //上傳文件到緩存區(qū)中
[root@git git]# git status -s
A  README
A  hello.php
[root@git git]# git diff --cached           //顯示已緩存的改動(dòng)
diff --git a/README b/README
new file mode 100644
index 0000000..190a180
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+123
diff --git a/hello.php b/hello.php
new file mode 100644
index 0000000..3b18e51
--- /dev/null
+++ b/hello.php
@@ -0,0 +1 @@
+hello world
5)git commit

使用 git add 命令將想要快照的內(nèi)容寫入了緩存, 而執(zhí)行 git commit 記錄緩存區(qū)的快照。
Git 為你的每一個(gè)提交都記錄你的名字與電子郵箱地址,所以第一步需要配置用戶名和郵箱地址。

[root@git git]# git config --global user.name "lzj"
[root@git git]# git config --global user.email "123456@qq.com"
//聲明用戶名及郵箱地址(可自定義)
[root@git git]# git status -s
A  README
A  hello.php
[root@git git]# git commit -m 'test comment from hello world'
//將文件提交到版本庫(kù)中,”-m“選項(xiàng)后的內(nèi)容相當(dāng)于注釋
//如果不添加”-m“選項(xiàng),Git會(huì)嘗試打開一個(gè)編輯器來(lái)填寫提交信息
[master(根提交) eff9686] test comment from hello world
 2 files changed, 2 insertions(+)
 create mode 100644 README
 create mode 100644 hello.php
[root@git git]# git status          //提交完成后,再次查看
# 位于分支 master
無(wú)文件要提交,干凈的工作區(qū)
6)git reset HEAD

git reset HEAD用于取消緩存已緩存的內(nèi)容。

[root@git git]# echo "123" >> README 
[root@git git]# echo "123" >> hello.php 
[root@git git]# git status -s
 M README
 M hello.php
[root@git git]# git add .
[root@git git]# git status -s
M  README
M  hello.php
[root@git git]# git reset HEAD -- hello.php        //指定文件撤出緩存區(qū)
重置后撤出暫存區(qū)的變更:
M   hello.php
[root@git git]# git status -s
M  README
 M hello.
//如果現(xiàn)在執(zhí)行g(shù)it commit命令則只記錄README文件的改動(dòng)
7)git log

git log用于對(duì)某個(gè)文件進(jìn)行更改的詳細(xì)日志信息!

[root@git git]# git log README         //查看指定文件的詳細(xì)日志信息
commit 572e555d40ddb941ff5d3f03f4644763a782acd7
Author: lzj <lzj@123.com>
Date:   Wed Feb 5 21:52:52 2020 +0800

    333

commit e4aac6a9ed71a96819025316b0c9a82e452da80a
Author: lzj <lzj@123.com>
Date:   Wed Feb 5 21:52:27 2020 +0800

    222

commit d11472818397d9294f26a8c85cee57158a6ee1b5
Author: lzj <lzj@123.com>
Date:   Wed Feb 5 21:51:57 2020 +0800

    111
[root@git git]# git log --pretty=oneline              //使顯示的日志在一行顯示
572e555d40ddb941ff5d3f03f4644763a782acd7 333
e4aac6a9ed71a96819025316b0c9a82e452da80a 222
d11472818397d9294f26a8c85cee57158a6ee1b5 111
8)git reflog

git reflog指令主要是查看對(duì)文件的修改,只要對(duì)文件進(jìn)行修改,便會(huì)產(chǎn)生一個(gè)HEAD指針,主要就是用于查看HEAD指針的。

[root@git git]# git reflog README            //針對(duì)指定文件進(jìn)行查看
572e555 HEAD@{0}: reset: moving to 572e555d40ddb941ff5d3f03f4644763a782acd7
e4aac6a HEAD@{1}: reset: moving to HEAD^
572e555 HEAD@{2}: commit: 333
e4aac6a HEAD@{3}: commit: 222
d114728 HEAD@{4}: commit (initial): 111
9)git reset --hard

git reset --hard指令主要用于回滾版本!

[root@git git]# git log --pretty=oneline      //將日志信息在一行進(jìn)行顯示
572e555d40ddb941ff5d3f03f4644763a782acd7 333
e4aac6a9ed71a96819025316b0c9a82e452da80a 222
d11472818397d9294f26a8c85cee57158a6ee1b5 111
//第一列為commit ID號(hào)
[root@git git]# git reset --hard HEAD^       //HEAD^:表示回滾到上一個(gè)版本
HEAD 現(xiàn)在位于 e4aac6a 222
//HAED~10:回滾到上十個(gè)版本,依次類推
[root@git git]# git reset --hard 572e555d40ddb941ff5d3f03f4644763a782acd7
HEAD 現(xiàn)在位于 572e555 333
//可以根據(jù)commit ID號(hào)回滾到指定的版本(commit ID不用寫全,寫5、6位即可)
10)git rm

git rm將文件從緩存區(qū)中移除。

[root@git git]# git rm hello.php -f         //對(duì)文件進(jìn)行修改,所以需要使用”-f“選項(xiàng)
rm 'hello.php'
[root@git git]# ls
README
默認(rèn)情況下,git rm file 會(huì)將文件從緩存區(qū)和你的硬盤中(工作目錄)刪除。 如果要在工作目錄中留著該文件,可以添加選項(xiàng)”-f“或”--cache“

git基礎(chǔ)命令:

git config   --global   user.name   “用戶名”
git config   --global   user.email  “郵箱”
git init  初始化版本庫(kù)
git add   添加修改
git  commit  提交修改到版本庫(kù)
git  status  查看版本庫(kù)的狀態(tài)
git  diff  查看當(dāng)前工作區(qū)和版本庫(kù)文件內(nèi)容的區(qū)別
git  log   查看版本庫(kù)提交的歷史
git  reflog 查看所有版本庫(kù)的提交歷史
git   reset   --hard   HEAD^  回退到上一次提交版本
git  reset    --hard    commit id號(hào) |  HEAD 編號(hào)    回退到指定的版本

六、將本地git庫(kù)關(guān)聯(lián)到github

1)在github上創(chuàng)建一個(gè)新的庫(kù)

登錄github官網(wǎng),沒(méi)有注冊(cè)賬號(hào)的,自行注冊(cè)!如圖:
Git基礎(chǔ)概念與操作是怎樣的
Git基礎(chǔ)概念與操作是怎樣的

2)生成密鑰對(duì)

[root@git ~]# ssh-keygen -t rsa -C "zhen18732036806@163.com"
//-C后指定的是與github關(guān)聯(lián)的郵箱地址
[root@git ~]# cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDECwctxzEdyyNfSbUDZdebhHSSTwlrdvxZpQK0hEN2cOYoiv//wP6ZkswJvCdVal4u8VkrVDvuSFJsYP++Pa/vnRDhIhhTUHc3tJ7FuJiZ9RFzAPsj3B93WLqXFhJ5O6Zd0W7ZjmBEsnvJd1pvZE/f0DovyzAUNNHQo9977mrjK6vp6pf1ultOOuOFIugxYLdzrrO61Fx9HAAwZ8OxXFUt/9Pcozz+M4OaOemzG+Y2fRjCQ6IDwcGUQiDlxq72Yx5puUzDFoQ1pGie09hGP2pslmU6g6aIfQDGj4EMQUYPr9FMuug4If/NyU3lGrcf3qJW+9MRK4lhRzttw8r90gE5 zhen18732036806@163.com
//查看生成的公鑰,并且復(fù)制

3)將公鑰上傳到github

如圖:
Git基礎(chǔ)概念與操作是怎樣的
Git基礎(chǔ)概念與操作是怎樣的
Git基礎(chǔ)概念與操作是怎樣的
Git基礎(chǔ)概念與操作是怎樣的

4)上傳文件進(jìn)行測(cè)試

如圖:
Git基礎(chǔ)概念與操作是怎樣的
Git基礎(chǔ)概念與操作是怎樣的

[root@git ~]# mkdir git && cd git               //創(chuàng)建一個(gè)目錄用于測(cè)試
[root@git git]# git init                      //初始化git
[root@git git]# git config --global user.name lvzhenjiang
[root@git git]# git config --global user.email zhen18732036806@163.com
//由于現(xiàn)在的環(huán)境是初始環(huán)境,所以需要聲明用戶名和郵箱
[root@git git]# echo "# test" >> README.md                    //創(chuàng)建測(cè)試文件
[root@git git]# git add README.md                  //將測(cè)試文件添加到暫存區(qū)
[root@git git]# git commit -m "first commit"          //將測(cè)試文件添加到版本庫(kù)中
[root@git git]# git remote add origin git@github.com:lvzhenjiang-hub/test.git
//將本地的版本庫(kù)與github的版本庫(kù)進(jìn)行關(guān)聯(lián)
[root@git git]# git push -u origin master
//將本地的文件上傳到遠(yuǎn)程版本庫(kù)的master分支中
//由于是第一次上傳需要添加”-u“選項(xiàng),之后就不需要了!根據(jù)提示輸入”yes“即可

上傳完成后,回到github網(wǎng)站上刷新一下頁(yè)面,就會(huì)出現(xiàn)以下頁(yè)面,如圖:
Git基礎(chǔ)概念與操作是怎樣的

七、從github下載到本地的版本庫(kù)

偷個(gè)懶,在第五步的基礎(chǔ)上開始接下來(lái)的操作!

這里就將剛才上傳到github的文件下載到本地,操作如下:

如圖:
Git基礎(chǔ)概念與操作是怎樣的

[root@git git]# mkdir /lzj && cd /lzj                     //創(chuàng)建一個(gè)空目錄用于測(cè)試
[root@git lzj]# git clone git@github.com:lvzhenjiang-hub/test.git
//執(zhí)行”git clone“命令,后面就是剛才復(fù)制的網(wǎng)址
[root@git lzj]# ls
test
[root@git lzj]# cat test/README.md 
# test
//確認(rèn)是剛才上傳的數(shù)據(jù)

看完上述內(nèi)容,你們掌握Git基礎(chǔ)概念與操作是怎樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

git
AI