關(guān)于GIT的學(xué)習(xí)

前言

這是我第一次寫博客,而且是第一篇有關(guān)于技術(shù)的博客。自己學(xué)習(xí)編程,接觸計(jì)算機(jī)的時(shí)間也不長(zhǎng),但是很喜歡,所以也一直在努力(群里大佬太多了,不努力不行呀)。所以寫的不好或者說不清楚的地方就請(qǐng)忽略吧。

正題

GIT的安裝和下載我就不在這兒多廢話了,百度上有一大堆,隨便找找就能裝了,我就直接說說我對(duì)GIT的見解好了。(中間用的圖基本都是從網(wǎng)上盜的,沒有別的意思,我只是覺得這些圖很有助于對(duì)于知識(shí)的理解,請(qǐng)見諒,也謝謝理解)

GIT的工作流程

我覺得在學(xué)習(xí)如何敲代碼之前,應(yīng)該了解一下GIT的工作流程,畢竟它是一個(gè)版本控制系統(tǒng),既然起到控制的作用,那么我們應(yīng)該知道它的工作原理,這樣也有助于后面對(duì)于代碼的理解。

我在網(wǎng)上有找到圖片進(jìn)行說明:


git-process.png

圖上的步驟很復(fù)雜,我說說我自己的理解:

  • 首先,克隆出來別人的資源(用GIT進(jìn)行代碼命令,這個(gè)后面會(huì)說,現(xiàn)在先看懂就行)
  • 你抄了比如人的東西肯定不能全用呀,所以要進(jìn)行修改和添加
  • 人家的代碼更新了,我們也要與時(shí)俱進(jìn)呀,所以也可以更新克隆來的代碼
  • 改完了準(zhǔn)備提交,提交前要查看一下自己的修改
  • 提交
  • 在修改完成后,如果發(fā)現(xiàn)錯(cuò)誤,可以撤回提交并再次修改并提交。
    以上就是我在學(xué)習(xí)過后自己總結(jié)的工作流程。

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

GIT的工作是分階段進(jìn)行的,網(wǎng)上的教程和博客有些寫的很晦澀難懂,比較復(fù)雜,所以我先說說自己的理解,然后再上更加專業(yè)的定義。
我覺得這個(gè)過程其實(shí)比較有利于維護(hù)和管理,更能體現(xiàn)GIT的“控制”功能。當(dāng)我們想要提交一些東西的時(shí)候,用GIT我們需要先建立一個(gè)倉(cāng)庫(kù)(git init),也可以手動(dòng)建立(新建一個(gè)文件夾,然后右鍵鼠標(biāo)點(diǎn)擊“GIT BUSH HERE”)。然后就要添加文件了(git add),這樣做之后就會(huì)將你的文件添加到暫存區(qū),相當(dāng)于文件是商品,暫存區(qū)則是發(fā)貨前的商品存放倉(cāng)庫(kù),方便文件的修改、確定和最終的提交。再確認(rèn)好了文件的修改后,就可以提交了(git commit),這就會(huì)將暫存區(qū)里的東西都寫到版本區(qū)里。
這些就是我對(duì)他們的基本理解,其中還有很多細(xì)節(jié)上的修改和操作,如"git reset HEAD" 時(shí),暫存區(qū)的目錄樹被版本區(qū)的目錄樹替代;"git rm --cached <file>" 刪除暫存區(qū)的文件; "git checkout ." 或者 "git checkout -- <file>" 用暫存區(qū)的文件替代工作區(qū)的文件; "git checkout HEAD ." 或者 "git checkout HEAD <file>" 等的操作還很多,我自己還沒有理解的太深入,因此也就不在這里做說明了,下面就直接上圖和定義了。

  • 工作區(qū):就是你在電腦里能看到的目錄。
  • 暫存區(qū):英文叫stage, 或index。一般存放在 ".git目錄下" 下的index文件(.git/index)中,所以我們把暫存區(qū)有時(shí)也叫作索引(index)。
  • 版本庫(kù):工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)不算工作區(qū),而是Git的版本庫(kù)。
image

Git 基本操作

因?yàn)镚IT的操作命令比較多,這里就列舉出來幾個(gè)比較典型而且常用的命令,其余的命令在需要使用的時(shí)候可以上網(wǎng)查找。

git init

這個(gè)命令我們上面有提到過,是創(chuàng)建庫(kù)的售后使用的,在任何的目錄下都可以使用。輸入:

git init

就可以創(chuàng)建一個(gè)GIT庫(kù)了。

git clone

用git clone可以將GIT庫(kù)拷貝到本地,然后自己進(jìn)行修改和查看。輸入:

git clone[url]

[url]為你想要復(fù)制的項(xiàng)目(可以是網(wǎng)址),就可以克隆了。
例如:

$ git clone http://github.com/jquery/jquery.git

git add

這個(gè)在前面也有提到過,可以將文件添加到緩存。

git add

add后面可以加文件名,也可以加 “.” 代表添加所有文件。

git status

它可以查看你的你的修改,可以和 “git add” 配合使用,同時(shí)在status后面添加 “-s”可以查看簡(jiǎn)短的信息,否則輸出詳細(xì)信息。
如:

$ git status -s
A README
A hello.php

$ git status
On branch master

Initial commit

Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README
new file: hello.php

git diff

這個(gè)用來查看寫入緩存前后的區(qū)別,可以分為以下幾類:

  • 尚未緩存的改動(dòng):git diff
  • 查看已緩存的改動(dòng): git diff --cached
  • 查看已緩存的與未緩存的所有改動(dòng):git diff HEAD
  • 顯示摘要而非整個(gè) diff:git diff --stat
    在first.php下輸入內(nèi)容為:

<?php
echo 'hello';
?>

$ git status -s

A README
AM hello.php
$ git diff
diff --git a/hello.php b/hello.php
index e69de29..69b5711 100644
--- a/hello.php
+++ b/hello.php
@@ -0,0 +1,3 @@
+<?php
+echo 'hello';
+?>

git commit

這個(gè)命令我們前面也提到過,他可以將暫存區(qū)的文件提交到版本庫(kù)中去。在進(jìn)行要求配置用戶名和郵箱。

$ git config --global user.name 'github'

$ git config --global user.email git@qq.com

如圖為上傳成功的代碼:


捕獲.PNG

“first commit”為第一次提交

git reset HEAD

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

$ git status -s
M README
M hello.php

$ git add .

$ git status -s

M README
M hello.pp
$ git reset HEAD hello.php

Unstaged changes after reset:
M hello.php
$ git status -s
M README
M hello.php

Git 分支管理

意味著從主線分開一個(gè)支路,同時(shí)工作。
創(chuàng)建分支:

git branch (branchname)

切換分支:

git checkout (branchname)

合并分支,將多個(gè)分支合并在一起:

git merge

列出分支

列出分支的命令:

git branch

沒有參數(shù)時(shí),會(huì)列出本地分支:


2.PNG

手動(dòng)創(chuàng)建分支后如下:


3.PNG
切換分支

$ ls

README
$ echo 'test' > test.txt

$ git add .

$ git commit -m 'add test.txt'

[master 048598f] add test.txt
2 files changed, 1 insertion(+), 3 deletions(-)
delete mode 100644 hello.php
create mode 100644 test.txt
$ ls

README test.txt

$ git checkout first

Switched to branch 'first'
$ ls
README hello.php

當(dāng)我們切換到"first"分支的時(shí)候,我們添加的新文件test.txt被移除了, 原來被刪除的文件hello.php文件又出現(xiàn)了。切換回"master"分支的時(shí)候,它們有重新出現(xiàn)了。

$ git checkout master

Switched to branch 'master'
$ ls
README test.txt

刪除分支

刪除分支命令為:

git branch -d (branchname)

刪除first分支:

$ git branch
* master
first

$ git branch -d first

Deleted branch first (was 85fc7e7).
$ git branch

* master

分支合并

$ git branch

* master
newtest
$ ls
README test.txt test2.txt

$ git merge newtest

Updating 2e082b7..556f0a0
Fast-forward
test2.txt | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 test2.txt
$ ls
README test.txt

以上將newtest合并到主分支上去,test2.txt被刪除。

合并沖突

首先,我們創(chuàng)建一個(gè)叫做"change_site"的分支,切換過去,我們將內(nèi)容改為 hello。

$ git checkout -b change_site

Switched to a new branch 'change_site'
$ vim test.txt

$ head -1 test.txt

hello
$ git commit -am 'changed the site'
[change_site d7e7346] changed the site
1 file changed, 1 insertion(+), 1 deletion(-)

將修改的內(nèi)容提交到 "change_site" 分支中。 現(xiàn)在,假如切換回 "master" 分支我們可以看內(nèi)容恢復(fù)到我們修改前的,我們?cè)俅涡薷膖est.txt文件。

$ git checkout master

Switched to branch 'master'
$ head -1 test.txt

hi hello
$ vim test.txt

$ cat test.txt

runoob.com
新增加一行
$ git diff

diff --git a/test.txt b/test.txt

index 704cce7..f84c2a4 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
hi hello
+新增加一行
$ git commit -am '新增加一行'
[master 14b4dca] 新增加一行
1 file changed, 1 insertion(+)

現(xiàn)在這些改變已經(jīng)記錄到我的 "master" 分支了。接下來我們將 "change_site" 分支合并過來。

$ git merge change_site

Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
$ cat test.txt
<<<<<<< HEAD
hi hello
新增加一行
=======
hello
>>>>>>> change_site

我們將前一個(gè)分支合并到 "master" 分支,一個(gè)合并沖突就出現(xiàn)了,接下來我們需要手動(dòng)去修改它。

$ vim test.txt

$ cat test.txt

hello
新增加一行
$ git diff
diff --cc test.txt
index f84c2a4,bccb7c2..0000000
--- a/test.txt
+++ b/test.txt
@@@ -1,2 -1,1 +1,2 @@@

  • hi hello
  • hello
    +新增加一行

在 Git 中,我們可以用 git add 要告訴 Git 文件沖突已經(jīng)解決

$ git status -s

UU test.txt
$ git add test.txt

$ git status -s

M test.txt
$ git commit
[master 88afe0e] Merge branch 'change_site'

現(xiàn)在我們成功解決了合并中的沖突,并提交了結(jié)果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git使用教程:https://blog.csdn.net/tgbus18990140382/article/de...
    SkTj閱讀 2,954評(píng)論 1 11
  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 16,212評(píng)論 5 147
  • 戀愛中的醋勁兒有時(shí)真是無法掩飾,自己的愛人經(jīng)常也愛過別人,也像關(guān)心我一樣關(guān)心著她人,有種心如刀割之感,百感交集。過...
    八戒55555閱讀 220評(píng)論 0 0
  • 夜生活 之 還債 夜生活2 之 學(xué)海無涯 ?_? ...
    據(jù)說我很高冷閱讀 195評(píng)論 0 0

友情鏈接更多精彩內(nèi)容