Git-學習-從基礎到實戰-宇宙最詳細

Git 簡介:

Git 介紹:

Git是目前世界上最先進的分佈式版本控制系統(沒有之一),在處理各種項目時都十分高效,而且非常的高大上。
Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。
Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分佈式版本庫的方式,不必服務器端軟件支持。
Git是分佈式版本控制系統,它就沒有中央服務器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因爲版本都是在自己的電腦上

Git和Svn區別

Git 不僅僅是個版本控制系統,它也是個內容管理系統(CMS),工作管理系統等。

如果你是一個具有使用 SVN 背景的人,你需要做一定的思想轉換,來適應 Git 提供的一些概念和特徵。

Git 與 SVN 區別點:
1、Git 是分佈式的,SVN 不是:這是 Git 和其它非分佈式的版本控制系統,例如 SVN,CVS 等,最核心的區別。

2、Git 把內容按元數據方式存儲,而 SVN 是按文件:所有的資源控制系統都是把文件的元信息隱藏在一個類似 .svn、.cvs 等的文件夾裏。

3、Git 分支和 SVN 的分支不同:分支在 SVN 中一點都不特別,其實它就是版本庫中的另外一個目錄。

4、Git 沒有一個全局的版本號,而 SVN 有:目前爲止這是跟 SVN 相比 Git 缺少的最大的一個特徵。

5、Git 的內容完整性要優於 SVN:Git 的內容存儲使用的是 SHA-1 哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。

工作原理 / 流程:

在這裏插入圖片描述

什麼是分佈式版本控制系統?

首先,分佈式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因爲版本庫就在你自己的電腦上。既然每個人電腦上都有一個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

和集中式版本控制系統相比,分佈式版本控制系統的安全性要高很多,因爲每個人電腦裏都有完整的版本庫,某一個人的電腦壞掉了不要緊,隨便從其他人那裏複製一個就可以了。而集中式版本控制系統的中央服務器要是出了問題,所有人都沒法幹活了。
這裏舉個例子,你需要編寫一個文檔,這個文檔呢財務部需要,產品部也需要。那麼你要怎麼寫呢。無非這樣做,先寫一部分部門的材料,保存下來一個版本,交給他們,再添加一部分材料保存另一個版本交給另外的部門。如果涉及到多個部門,可能你需要寫多個版本,都保存下來。然而,電腦桌面亂糟糟的,卻又不敢刪除任何一個版本。
  這並不是最糟糕的。最糟糕的是這麼多部門又給你返回了他們各自部門的信息。你還要將它們統一到一個版本里。
  這時你會不會希望有一個管理系統不但能自動幫我記錄每次文件的改動,還可以讓同事協作編輯,這樣就不用自己管理一堆類似的文件了,也不需要把文件傳來傳去。如果想查看某次改動,只需要在軟件裏瞄一眼就可以,豈不是很方便?

Git安裝

最早Git是在Linux上開發的,很長一段時間內,Git也只能在Linux和Unix系統上跑。不過,慢慢地有人把它移植到了Windows上。現在,Git可以在Linux、Unix、Mac和Windows這幾大平臺上正常運行了。
Git 各平臺安裝包下載地址爲:Git下載地址官網
在這裏插入圖片描述
如上圖所示,選擇自己的系統下載安裝即可;
下載下來以後,閉着眼睛,一路安裝即可,安裝成功以後在Windos上,點擊鼠標右鍵,會出來git的選項
在這裏插入圖片描述
在這裏我們點擊Git Bash Here會出現像cmd黑窗口一樣的命令窗口,Git就安裝成功了。
安裝成功以後我們可以去Github官網註冊自己的賬號 Github官網地址
我們要做的第一件事就是打開git的命令窗口,輸入如下命令:

# 配置用戶名
git config --global user.name "username"    //( "username"是自己的賬戶名,)
# 配置郵箱
git config --global user.email "[email protected]"     //("[email protected]"註冊賬號時用的郵箱)

以上命令執行結束後,可用 git config --global --list 命令查看配置是否OK

Git 工作區、暫存區和版本庫

  • 工作區:就是你在電腦裏能看到的目錄。
  • 暫存區:英文叫stage, 或index。一般存放在 “.git目錄下” 下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
  • 版本庫:版本庫(repository)也叫倉庫,可以看做一個目錄,這個目錄裏的所以文件都由Git進行管理,每個文件的修改、刪除,Git都能跟蹤。

Git 創建倉庫

使用git init

在自己電腦上隨便創建一個文件夾,比如叫test,我們進入這個文件夾以後,右鍵打開Git Bash Here窗口,執行以下操作
命令: git init

$ git init
Initialized empty Git repository in /Users/Administrator/learngit/.git/

該命令執行完後會在當前目錄生成一個 .git 目錄。
瞬間Git就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository).

介紹

git init
Git 使用 git init 命令來初始化一個 Git 倉庫,Git 的很多命令都需要在 Git 的倉庫中運行,所以 git init 是使用 Git 的第一個命令。

在執行完成 git init 命令後,Git 倉庫會生成一個 .git 目錄,該目錄包含了資源的所有元數據,其他的項目目錄保持不變(不像 SVN 會在每個子目錄生成 .svn 目錄,Git 只在倉庫的根目錄生成 .git 目錄)。

使用git status 命令

$ 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:   readme.txt
 
no changes added to commit (use "git add" and/or "git commit -a")

上面的命令告訴我們,test.txt 文件被修改過了,但還沒有準備提交的修改。

如果我們想知道上次是怎麼修改readme.txt 文件的,需要用 git diff 命令:

使用git add

在使用git init 以後沒,我們的電腦會出現一個.git文件,我們在當前文件夾地下創建一個文件,比如test.txt,然後在裏面隨便輸入一些內容以後保存退出。

git add test.txt  # 把本地文件(工作區)添加到緩存區

這裏我們只是添加了一個文件到暫存區,而我們在工作當中一般使用

git add .

將本文件夾下所有文件添加到暫存區,注意,後面的不能丟

使用git commit

git commit 是將我們的代碼或者文件提交到了本地的倉庫,而不是遠程的倉庫,這和SVN有很大的區別。

$ git commit -m "first commit"  #每一次提交都要寫清楚提交的內容,這對後面版本回退很重要
[master e475afc] add distributed
 1 file changed, 1 insertion(+), 1 deletion(-)

再用 git status 查看一下當前倉庫狀態:

$ git status
On branch master
nothing to commit, working tree clean //當前沒有需要提交的修改,而且,工作目錄是乾淨的。

版本回退

以前,如果是要去除某一塊功能,我都是選擇性刪除,選擇性註釋,然後前後邏輯各種查看,各種比較。每一次,改完這些我總感覺心好累啊!!!然後,我就發現了 Git 一個非常強大的功能:回滾。當然我還是喜歡叫它:版本回退。

git log

輸入該命令,會顯示從最近到最遠的提交日誌(所有日誌)。每一次提交都有對應的 commit id 和 commit message。
如果嫌棄輸出的信息雜亂無章,那麼加上 --pretty=oneline 參數試試吧!

git log --pretty=onelin

在這裏插入圖片描述
也可以使用這個命令查看日誌:

git reflog

在這裏插入圖片描述
我們可以根據你每次提交代碼的信息,回退到任意一個版本

git reset --hard accXxXXXX #這個就是你要回退的的版本id

版本回退有很多種命令可以實現,比如下面這種,不推薦,還是採用上面的最好

$ git reset --hard HEAD^ //HEAD表示當前版本,則HEAD^表示上一個版本,那麼上上版本就是HEAD^^
HEAD is now at e475afc add distributed

Git 遠程倉庫

創建遠程倉庫

首先,登陸GitHub,然後,在右上角找到“Create a new repo”按鈕,創建一個新的倉庫:
在這裏插入圖片描述
最後點擊create repository就創建成功了
在這裏插入圖片描述
新創建的,Github都有給你提示,怎麼將代碼放到你新建的倉庫,提示有三種方法,你可以根據自己的情況,將本地代碼提交到你創建的遠程倉庫。

將本地代碼提交到遠程倉庫

首先進入自己的本地代碼文件夾目錄,打開git命令窗口,依次執行一下代碼:

git init   // 初始化版本庫
 
git add .   // 添加文件到版本庫(只是添加到緩存區),.代表添加文件夾下所有文件 
 
git commit -m "first commit" // 把添加的文件提交到版本庫,並填寫提交備註

到目前爲止,我們完成了代碼庫的初始化,但代碼是在本地,還沒有提交到遠程服務器,所以關鍵的來了,要提交到就遠程代碼服務器,進行以下兩步:

git remote add origin 你的遠程庫地址  // 把本地庫與遠程庫關聯
 
git push -u origin master    // 第一次推送時
 
git push origin master  // 第一次推送後,直接使用該命令即可推送修改

注意在這裏可能會出現錯誤,就是你的代碼已經和遠程倉庫有了關聯,那麼我們可以這樣操作:

git remote remove origin

在繼續執行上面的命令即可

從遠程倉庫clone代碼

打開空文件夾,打開git命令窗口:

git clone https://github.com/chxxx/xxxxxx.git

在這裏插入圖片描述

Git 分支管理

幾乎每一種版本控制系統都以某種形式支持分支。使用分支意味着你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。

有人把 Git 的分支模型稱爲必殺技特性,而正是因爲它,將 Git 從版本控制系統家族裏區分出來。
在版本回退裏,你已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裏,這個分支叫主分支,即master分支。HEAD嚴格來說不是指向提交,而是指向master,master纔是指向提交的,所以,HEAD指向的就是當前分支。

一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點:
在這裏插入圖片描述

首先,我們創建dev分支,然後切換到dev分支:

創建分支命令:

$ git checkout -b dev
Switched to a new branch 'dev'

切換分支命令:

$ git checkout dev
Switched to branch 'dev'

然後,用git branch命令查看當前分支:
git branch命令會列出所有分支,當前分支前面會標一個*號。

$ git branch
* dev
  master

合併分支

當你切換分支的時候,Git 會用該分支的最後提交的快照替換你的工作目錄的內容, 所以多個分支不需要多個目錄。
我們在dev分支修改了代碼以後,通過commit命令提交以後,切換到master分支以後,想要合併dev分支修改的內容

$ git checkout master
Switched to branch 'master'

合併分支命令:

$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

刪除分支

刪除分支命令:

git branch -d (branchname)

分支衝突解決

人生不如意之事十之八九,合併分支往往也不是一帆風順的。
在 Git 中,我們可以用 git add 要告訴 Git 文件衝突已經解決

$ git status -s
UU runoob.php
$ git add runoob.php
$ git status -s
M  runoob.php
$ git commit
[master 88afe0e] Merge branch 'change_site'

在這裏我就不做過多的關於衝突介紹了,因爲在實際開發當中,我是使用IDEA的,它的git圖形化界面非常友好,我們可以根據圖形化界面的提示,進行修改,重新上傳就可以了。

Git查看提交歷史

使用 git log 命令列出歷史提交記錄。

# 顯示有變更的文件
$ git status

# 顯示當前分支的版本歷史
$ git log

# 顯示commit歷史,以及每次commit發生變更的文件
$ git log --stat

# 搜索提交歷史,根據關鍵詞
$ git log -S [keyword]

# 顯示某個commit之後的所有變動,每個commit佔據一行
$ git log [tag] HEAD --pretty=format:%s

# 顯示某個commit之後的所有變動,其"提交說明"必須符合搜索條件
$ git log [tag] HEAD --grep feature

# 顯示某個文件的版本歷史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]

# 顯示指定文件相關的每一次diff
$ git log -p [file]

# 顯示過去5次提交
$ git log -5 --pretty --oneline

# 顯示所有提交過的用戶,按提交次數排序
$ git shortlog -sn

# 顯示指定文件是什麼人在什麼時間修改過
$ git blame [file]

# 顯示暫存區和工作區的差異
$ git diff

# 顯示暫存區和上一個commit的差異
$ git diff --cached [file]

# 顯示工作區與當前分支最新commit之間的差異
$ git diff HEAD

# 顯示兩次提交之間的差異
$ git diff [first-branch]...[second-branch]

# 顯示今天你寫了多少行代碼
$ git diff --shortstat "@{0 day ago}"

# 顯示某次提交的元數據和內容變化
$ git show [commit]

# 顯示某次提交發生變化的文件
$ git show --name-only [commit]

# 顯示某次提交時,某個文件的內容
$ git show [commit]:[filename]

# 顯示當前分支的最近幾次提交
$ git reflog

Git命令大全

在這裏插入圖片描述
以上就是本人學習使用Git的一些記錄,如有錯誤,歡迎指正交流!

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