1. 程式人生 > 實用技巧 >Git基操

Git基操

一、git簡介

1.1、git概述

Git是分散式版本控制系統(Distributed Version Control System,簡稱 DVCS) ,分為兩種型別的倉庫:本地倉庫和遠端倉庫。 下載地址:https://git-scm.com/download

  • 本地倉庫:是在開發人員自己電腦上的Git倉庫

  • 遠端倉庫:是在遠端伺服器上的Git倉庫

1.2、git工作流程

  1. 從遠端倉庫中克隆程式碼到本地倉庫(git clone)
  2. 從本地倉庫中checkout程式碼然後進行程式碼修改(checkout)
  3. 在提交前先將程式碼提交到暫存區(add)
  4. 提交到本地倉庫。本地倉庫中儲存修改的各個歷史版本(commit)
  5. 修改完成後,需要和團隊成員共享程式碼時,將程式碼push到遠端倉庫(push)

1.3、Git常用的程式碼託管平臺

​ 我們的遠端倉庫就建立在程式碼託管平臺上,常見的有GitHub,GitLab,還有碼雲等

  • itHub( 地址:https://github.com/ )是一個面向開源及私有軟體專案的託管平臺,因為只支援Git 作為唯一的版本庫格式進行託管,故名gitHub
  • 碼雲(地址: https://gitee.com/ )是國內的一個程式碼託管平臺,由於伺服器在國內,所以相比於GitHub,碼雲速度會更快
  • GitLab (地址: https://about.gitlab.com/ )是一個用於倉庫管理系統的開源專案,使用Git作為程式碼管理工具,並在此基礎上搭建起來的web服務

二、Git常用命令

2.1、環境配置

  • 設定使用者資訊

    git config --global user.name "name" # 設定git使用者名稱
    git config --global user.name "email"# 設定git郵箱
    
  • 檢視使用者的配置資訊

    git config --list # 檢視git的配置
    git config user.name # 檢視git的使用者名稱
    git config user.email #檢視郵箱
    

    通過上面的命令設定的資訊會儲存在C盤使用者目錄下的.gitconfig檔案中

2.2、獲取Git倉庫

要使用Git對我們的程式碼進行版本控制,首先需要獲得Git倉庫

  • 可以通過clone命令從遠端倉庫克隆一個到本地

  • 可以通過init命令在本地初始化一個Git倉庫

通過以上兩種方式都可以在本地撞見一個倉庫,它會生成一個.git的檔案,有這個檔案代表著是一個git本地倉庫

2.3、工作目錄、暫存區和版本庫

  • 前面看到的.git隱藏資料夾就是版本庫,版本庫中儲存了很多配置資訊、日誌資訊和檔案版本資訊等
  • 包含.git資料夾的目錄就是工作目錄,主要用於存放開發的程式碼
  • .git資料夾中有很多檔案,其中有一個index檔案就是暫存區,也可以叫做stage。暫存區是一個臨時儲存修改檔案的地方

Git工作目錄下的檔案存在兩種狀態:

  1. untracked未跟蹤狀態(未被納入版本控制)
  2. tracked已跟蹤(被納入版本控制)
    • unmodified 未修改狀態
    • modified 已修改狀態
    • staged已暫存狀態

2.4、本地倉庫操作

  1. git status 檢視檔案狀態

我們新建了一個.gitignore檔案(可以在這個檔案裡面配置哪些檔案不必納入版本控制),此時檢視檔案狀態發現.gitignore是未被跟蹤狀態,也可以使用git status -s 命令簡介的顯示檔案狀態

​ 2. git add 將檔案新增到暫存區

此時檢視再次檢視檔案狀態

  1. git reset 將暫存區的檔案取消暫存

我們新增到暫存取得檔案並沒有提交到本地的倉庫,可以通過git reset命令取消暫存,再次檢視檔案,檔案又處於未被跟蹤狀態.

  1. git commit 將暫存區檔案提交到倉庫

引數-m的意思是記錄提交的日誌,想要commit必需要經過add

  1. git rm 刪除檔案

    此時顯示.gitignore檔案已經被刪除,但是這只是刪除了工作區的檔案並沒有刪除本地倉庫的檔案。

    將刪除操作提交到本地倉庫

注意:使用git rm 刪除後預設進入暫存區可以直接commit,但是如果在windows中刪除則需要add

  1. .gitignore忽略檔案

    一般我們總會有些檔案無需納入Git 的管理,也不希望它們總出現在未跟蹤檔案列表。 通常都是些自動生成的檔案,比如日誌檔案,或者編譯過程中建立的臨時檔案等。 在這種情況下,我們可以在工作目錄中建立一個名為 .gitignore 的檔案

    7.git log 檢視日誌記錄

2.5、遠端倉庫操作

  1. git remote 檢視遠端倉庫

    如果本地倉庫是直接從遠端倉庫clone的,我們可以看到一個origin 。這是Git克隆的倉庫伺服器的預設名字。

    如果沒有指定遠端倉庫,則啥也沒有

  2. 新增和斷開遠端倉庫

    git remote add 新增一個新的遠端 Git 倉庫,同時指定一個可以引用的簡寫

    如果想要斷開與遠端倉庫的連線可以使用git remote remove [倉庫(origin)]注意:此命令只是從本地移除遠端倉庫的記錄,並不會真正影響到遠端倉庫

    遠端倉庫可以新增多個

  3. 從遠端倉庫克隆

    如果你想獲得一份已經存在了的 Git 倉庫的拷貝,這時就要用到 git clone 命令。 Git 克隆的是該 Git 倉庫伺服器上的幾乎所有資料(包括日誌資訊、歷史記錄等),而不僅僅是複製工作所需要的檔案。 當你執行 git clone 命令的時候,預設配置下遠端 Git 倉庫中的每一個檔案的每一個版本都將被拉取下來。

    命令形式:git clone [url]

  4. 從遠端倉庫fetch

    git fetch 是從遠端倉庫獲取最新版本到本地倉庫,它會將資料放在git檔案的object檔案裡面,我們找不到,它不會自動merge,fetch過後需要使用merge命令將本地倉庫的資料和fetch來的資料合併。

    命令形式:git fetch[remote-name] [branch-name]

    ​ git merge[remote-name]/ [branch-name]

    注意:如果本地倉庫不是從遠端倉庫克隆而來而是init初始化而來。則第一次合併或者提交的時候會出現fatal:refusing to merge unrelated histories,我們需要在命令後面加上--allow-unrelated-histories,表示允許不相關的歷史

  5. 從遠端倉庫pull

    命令形式:git push [remote-name] [branch-name]

    如果第一次出現出現fatal:refusing to merge unrelated histories,也需要加上--allow-unrelated-histories

  6. 將本地倉庫程式碼推送到遠端倉庫

    當你想分享你的程式碼時,可以將其推送到遠端倉庫。 命令形式:git push [remote-name] [branch-name]

2.6、Git分支

​ 幾乎所有的版本控制系統都以某種形式支援分支。 使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線。master分支是git倉庫的預設分支。

  1. 檢視分支

    列出所有本地分支:git branch

    列出所有遠端的分支:git branch -r

    列出所有本地分支和遠端分支:git branch -a

  2. 建立分支

    命令格式:git branch [branch_name]

  3. 切換分支

    使用git checkout [branch_name]可以切換分支,前面的*和綠色就表示當前分支

    在當前分支下建立一個檔案master2.txt並push到遠端倉庫maste2分支,此時master分支沒有master2.txt檔案。

    當我們切換到master分支沒有master2.txt檔案

    當我們切換到master2分支,發現master2.txt檔案

  4. git合併分支

    命令格式:git merge [branch_name]

    注意:如果你在兩個不同的分支中,對同一個檔案的同一個部分進行了不同的修改,Git 就沒辦法合併它們,同時會提示檔案衝突。此時需要我們開啟衝突的檔案並修復衝突內容,最後執行git add命令來標識衝突已解決

  5. 刪除分支

    git branch -d [branch_name]

    如果要刪除的分支中進行了一些開發動作,此時執行上面的刪除命令並不會刪除分支,如果堅持要刪除此分支,可以將命令中的-d引數改為-D

    git branch -D [branch_name]

    如果要刪除遠端倉庫中的分支,可以使用命令git push origin –d [branch_name]

    此時遠端倉庫只剩下master分支,沒有master2分支

2.7、Git標籤

Git 可以給歷史中的某一個提交打上標籤,以示重要。 比較有代表性的是人們會使用這個功能來標記釋出結點(v1.0 、v1.2等)。標籤指的是某個分支某個特定時間點的狀態。通過標籤,可以很方便的切換到標記時的狀態。

  1. 建立標籤

    git tag [tag_name]建立一個新的標籤

  2. 列出標籤

    git tag檢視有哪些標籤

    git show [tag_name] 檢視標籤的詳細資訊

  3. 將標籤推送到倉庫

    git push [remote] [brance] [tag_name]

    可以看到遠端倉庫多了一個v1.0標籤

  4. 新建一個分支,指向某個標籤

    命令格式:git checkout -b [branch] [tag]

  5. 刪除標籤

    git tag -d [tag_name] 刪除本地標籤

    git push [remote] [branch] :refs/taags/[tag_name] 刪除遠端標籤

三、Git時光機

3.1、reset和checkout

​ 在工作中,一旦誤刪了檔案或者是把檔案弄亂了,我們可以從最近的一個commit版本恢復。git log命令 顯示從最近到最遠的提交日誌,可以見看到我們各個版本的日誌每個版本都有一個commit id,其HEAD表示當前版本,HEAD表示上一個版本,HEAD表示上上一個版本,往上100個版本可以寫成HEAD加連續100個,也可以寫成:HEAD~100。

git log :顯示從最近到最遠的提交日誌

git log --pretty=oneline:將只會顯示提交的commit id號和對應的註釋。

回退到上一個版本

git reset --hard HEAD^

已經成功回退到上一個版本,此時執行以此git log,已經沒有第三個版本的資訊

此時我們如果想要恢復到第三個版本,我們需要使用 git reflog來檢視過的你使用過的每一條命令

執行命令 git reset --hard [commitId]

已經回到第三個版本!

git reset --soft [id] :最近一次提交節點的提交記錄回退到暫存區。此時a.txt已經新增到暫存區但是未被提交

git reset --mixed HEAD^ :將最近一次提交節點的提交記錄回退到工作區

如果想要將暫存區的內容回退到工作區直接使用git reset 命令。

如果想要清除工作區某個檔案的修改可以使用 git checkout -- [file_name]命令,git checkout其實是用版本庫裡的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。

3.2、revert

git revert是用於“反做”某一個版本,以達到撤銷該版本的修改的目的。比如,我們commit了三個版本(版本一、版本二、 版本三),突然發現版本二不行(如:有bug),想要撤銷版本二,但又不想影響撤銷版本三的提交,就可以用 git revert 命令來反做版本二,生成新的版本四,這個版本四里會保留版本三的東西,但撤銷了版本二的東西。

參考連線:https://blog.csdn.net/yxlshk/article/details/79944535

參考連線:https://www.jianshu.com/p/09dbd8dc7345