天天看點

Git全棧開發者使用指南

一、Git基礎

1、Git簡介

Git是一種分布式版本控制系統,由Linux之父Linus開發。

所謂分布式版本管理系統,就是在每一台機器上都有一個完整的倉庫。

Git全棧開發者使用指南

2、Git官網

Git官網:git

Git全棧開發者使用指南

在官網上可以擷取Git的安裝軟體。

除此之外,還可以下載下傳《progit》——這是最棒的Git學習資料,而且有中文版本。

3、Git安裝

從 

https://git-scm.com/downloads

官方下載下傳位址下載下傳對應的作業系統版本一步步安裝即可。

Git全棧開發者使用指南

4、Git基本配置

安裝完成之後,在任意目錄下,右鍵 

Git Bash Here

Git全棧開發者使用指南

全局配置郵箱和使用者名(

–global

表示全局配置,也可以不配置,每個倉庫單獨配置)

$ git config --global user.name "test"
$ git config --global user.email [email protected]
           

5、Git基本概念

5.1、Git工作區域

Git有四個工作區域:

  • 工作區

    簡單說工作區就是我們項目的目錄。

    Git全棧開發者使用指南
  • 倉庫區/本地倉庫

    工作區有一個

    .git

    目錄,其實這個不是工作區,是Git的版本庫,存儲了Git倉庫的所有版本資訊
    Git全棧開發者使用指南
    Git全棧開發者使用指南
  • 暫存區

    暫存區域是一個檔案,儲存了下次将送出的檔案清單資訊,一般在 Git 倉庫目錄中。 有時候也被稱作“索引”,

    不過一般說法還是叫暫存區域。

  • 遠端倉庫

    對于分布式版本管理系統,遠端倉庫不是必須存在的,但是通常項目都會有遠端倉庫。例如

    Github

    就是我們非常熟悉的遠端倉庫。
    Git全棧開發者使用指南
    基本的Git工作流程如下:
    • 在工作目錄修改檔案
    • 暫存檔案,将檔案快照放入暫存區
    • 送出更新,找到暫存區的檔案,将快照永久性存儲到到 Git 倉庫區(本地)
    • 将本地倉庫的變更推送到遠端倉庫

以上幾個區域的關系可以用下圖表示:

5.2、Git分支

分支是為了将修改記錄的整個流程分開存儲,讓分開的分支不受其它分支的影響,是以在同一個資料庫裡可以同時進行多個不同的修改。

Git全棧開發者使用指南

Git 為我們自動建立的第一個分支,也叫主分支,一般其它分支開發完成後都要合并到 master

5.3、Git檔案狀态

在git中,檔案主要有四種狀态:

Git全棧開發者使用指南
  • Untracked: 未跟蹤, 此檔案在檔案夾中, 但并沒有加入到git庫, 不參與版本控制. 通過

    git add

     狀态變為

    Staged

    .
  • Unmodify(Committed): 檔案已經入庫, 未修改, 即版本庫中的檔案快照内容與檔案夾中完全一緻. 這種類型的檔案有兩種去處, 如果它被修改, 而變為

    Modified

    . 如果使用

    git rm

    移出版本庫, 則成為

    Untracked

    檔案
  • Modified: 檔案已修改, 僅僅是修改, 并沒有進行其他的操作. 這個檔案也有兩個去處, 通過

    git add

    可進入暫存

    staged

    狀态, 使用

    git checkout

     則丢棄修改過, 傳回到

    unmodify

    狀态, 這個

    git checkout

    即從庫中取出檔案, 覆寫目前修改
  • Staged: 暫存狀态. 執行

    git commit

    則将修改同步到庫中, 這時庫中的檔案和本地檔案又變為一緻, 檔案為

    Unmodify

    狀态. 執行

    git reset HEAD filename

    取消暫存, 檔案狀态為

    Modified

二、Git應用實踐

看完上面的Git基礎,你可能有一些迷惑,接下來,我們以實際工作中開發的流程來加深對Git的了解吧。

1、克隆項目

可以通過在工作區使用

git init

來初始化一個Git倉庫,但通常開發中我們不會這樣做,因為實際的項目大部分已經進行了部分開發,并進行了版本管理,是以我們首先做的是從遠端倉庫克隆項目。

這裡我從Gitee(一般開發項目的遠端倉庫是部署在内網的GitLab) 

fork

了一個開源項目,将這個項目作為遠端倉庫的項目:

點選

克隆下載下傳

,可以看到項目的路徑,

  • HTTPS

    是憑據式的路徑,使用此路徑,向遠端倉庫推送代碼的時候需要憑據(賬号密碼);
    這種方式向遠端倉庫送出,會要求賬号密碼,輸入完成之後,Win10作業系統可以選擇記住憑據,這樣就不用每一次都輸入了,Win10作業系統管理憑據 

    控制台 → 使用者帳戶 → 憑據管理器 → Windows憑據

    Git全棧開發者使用指南
  • SSH

    是秘鑰式的路徑,向遠端倉庫推送代碼的時候,需要本地的私鑰和遠端倉庫的公鑰對應。

    SSH配置可以參考 Windows配置Github、Gitee共存的Git環境,這裡就不詳細展開講解。

我已經進行了公私鑰的配置,是以這裡選擇SSH。

使用

git clone

指令克隆項目

Git全棧開發者使用指南

2、代碼管理

項目已經成功克隆,接下來要進行我們的開發了。

2.1、建立分支

通常開發不是在

Master

分支上,而是在開發分支上,使用 

git branch develop

建立一個新分支:

Git全棧開發者使用指南

可以通過

git branch

指令列出所有分支:

Git全棧開發者使用指南

可以看到我們建立的分支。

2.2、切換分支

git checkout develop

指令切換到建立的develop分支:

Git全棧開發者使用指南

2.3、添加檔案到暫存區

接下來,我們再develop分支上進行一些開發操作,我這裡對 redeme 進行了一些修改,需要把修改添加到暫存區。

  • 首先通過 

    git status

    指令檢視工作區檔案狀态
    Git全棧開發者使用指南
  • 接下來使用 

    git add README.md

    指令(可以使用

    git add .

    添加所有修改)将更改添加到暫存區
Git全棧開發者使用指南

可以看到檔案已經添加。

2.4、送出修改到倉庫

接下來使用

git commit -m "😀修改了redeme"

,将修改送出到倉庫

Git全棧開發者使用指南

這裡值得一提的是,我們的送出資訊盡量遵循某種規範,例如在送出資訊中展現本次送出的類型:

  • feat :新功能
  • fix : bug修複
  • docs :文檔變更
  • style :與樣式相關的所有變動
  • refactor :既不是bug修複也未添加功能的代碼更改
  • test :與測試有關所有變動
  • chore :改變了建構任務,程式包管理器配置等

規範而精确的送出資訊不僅能幫助我們的同僚快速了解我們的送出,也對我們自己的開發和重構有很大的幫助。我喜歡用表情包标注送出類型,這樣從遠端倉庫看送出記錄比較好看😄

Git全棧開發者使用指南

git log

指令檢視送出曆史:

Git全棧開發者使用指南

2.5、推送修改到遠端倉庫

可以使用

git push origin develop

指令将修改推送到遠端倉庫,在推送之前,通常通過

git pull origin develop

(本執行個體遠端倉庫不存在develop分支,是以直接推送)指令來拉取遠端倉庫——這個是為了避免本地版本落後的情況,當然如果沖突你也可以強制送出,隻是你的同僚會做出什麼過激行為不敢保證。😂

Git全棧開發者使用指南

在我們的遠端倉庫就可以看到這次送出了:

Git全棧開發者使用指南

2.6、合并分支

最終我們的送出都是要合并到

master

分支的,首先切換到

master

分支,接着通過指令,

git merge develop

指令,将

develop

分支合并到

master

Git全棧開發者使用指南

我們這個分支是沒有沖突的,可能在合并的過程中會出現沖突的情況,可以通過 

git status

 檢視沖突的檔案,手動解決沖突。當然,可以借助一些開發工具來完成這個工作,下文再講。

2.7、版本回退

假如說,我們發現這次送出不是我們想要的,可以通過 

git reset --hard HEAD^

 回退到上一次送出

Git全棧開發者使用指南

2.8、打标簽

假如我們要釋出一個版本,我們通常會給這次送出打一個标簽 

git tag publish/0.0.1

Git全棧開發者使用指南

git tag

指令來檢視我們打的标簽。

三、Git常用指令

在上面有這樣一張圖檔,基本上日常使用記住這6個指令就可以了,但是要想熟練使用,可能就需要記住更多指令了,這裡整理了一些常用的指令。

Git全棧開發者使用指南

1、初始化倉庫

# 在目前目錄建立一個Git代碼庫
    $ git init

    # 建立一個目錄,将其初始化為Git代碼庫
    $ git init [project-name]

    # 下載下傳一個項目和它的整個代碼曆史
    $ git clone [url]

           

2、配置

Git的設定檔案為.gitconfig,它可以在使用者主目錄下(全局配置),也可以在項目目錄下(項目配置)。

# 顯示目前的Git配置
    $ git config --list

    # 顯示 Git 的某一項配置
    $ git config <key>

    # 編輯Git配置檔案
    $ git config -e [--global]

    # 設定送出代碼時的使用者資訊,選擇global即全局配置
    $ git config [--global] user.name "[name]"
    $ git config [--global] user.email "[email address]"

           

3、增加/删除檔案

這裡的增加/删除檔案指的是向暫存區增加/删除檔案。

# 檢視檔案狀态,檢視目前工作區新增、更改或删除的檔案
    $ git status
     
    # 添加指定檔案到暫存區,可以添加多個檔案,中間以空格隔開
    $ git add [file1] [file2] ...

    # 添加指定目錄到暫存區,包括子目錄
    $ git add [dir]

    # 添加目前目錄的所有檔案到暫存區
    $ git add .

    # 添加每個變化前,都會要求确認
    # 對于同一個檔案的多處變化,可以實作分次送出
    $ git add -p

    # 删除工作區檔案,并且将這次删除放入暫存區
    $ git rm [file1] [file2] ...

    # 停止追蹤指定檔案,但該檔案會保留在工作區
    $ git rm --cached [file]

    # 改名檔案,并且将這個改名放入暫存區
    $ git mv [file-original] [file-renamed]
    
    # 臨時儲存修改,可跨分支
    # save為可選項
    $ git stash [save message]
    # 所有儲存的記錄清單
    $ git stash list
    # 恢複工作進度到工作區,此指令的stash@{num}是可選項,在多個工作進度中可以選擇恢複,不帶此項則預設恢複最近的一次進度相當于git stash pop stash@{0}
    $ git stash pop [stash@{num}]
    # 恢複工作進度到工作區且該工作進度可重複恢複,此指令的stash@{num}是可選項,在多個工作進度中可以選擇恢複,不帶此項則預設恢複最近的一次進度相當于git stash apply stash@{0}
    $ git stash apply [stash@{num}]
    # 删除一條儲存的工作進度,此指令的stash@{num}是可選項,在多個工作進度中可以選擇删除,不帶此項則預設删除最近的一次進度相當于git stash drop stash@{0}
    $ git stash drop stash@{num} 
    # 删除所有儲存
    $ git stash clear

           

4、代碼送出

# 送出暫存區到倉庫區,如果不加-m,會進入vim編輯器
    $ git commit -m [message]

    # 送出暫存區的指定檔案到倉庫區
    $ git commit [file1] [file2] ... -m [message]

    # 送出工作區自上次commit之後的變化,直接到倉庫區
    $ git commit -a

    # 送出時顯示所有diff資訊
    $ git commit -v

    # 使用一次新的commit,替代上一次送出
    # 如果代碼沒有任何新變化,則用來改寫上一次commit的送出資訊
    $ git commit --amend -m [message]

    # 重做上一次commit,并包括指定檔案的新變化
    $ git commit --amend [file1] [file2] ...
    
           

5、分支

# 列出所有本地分支
    $ git branch

    # 列出所有遠端分支
    $ git branch -r

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

    # 建立一個分支,但依然停留在目前分支
    $ git branch [branch-name]

    # 建立一個分支,并切換到該分支
    $ git checkout -b [branch]

    # 建立一個分支,指向指定commit
    $ git branch [branch] [commit]

    # 建立一個分支,與指定的遠端分支建立追蹤關系
    $ git branch --track [branch] [remote-branch]

    # 切換到指定分支,并更新工作區
    $ git checkout [branch-name]

    # 切換到上一個分支
    $ git checkout -

    # 建立追蹤關系,在現有分支與指定的遠端分支之間
    $ git branch --set-upstream [branch] [remote-branch]

    # 合并指定分支到目前分支
    $ git merge [branch]
   
    # 檢視分支合并狀态
    $  git rerere status
   
    # 顯示合并沖突解決方案的目前狀态——開始解決前與解決後的樣子
    $  git rerere diff

    # 選擇一個commit,合并進目前分支
    $ git cherry-pick [commit]
    
    #分支重命名
    $ git git branch -m [oldName]  [newName]
    # 删除分支
    $ git branch -d [branch-name]

    # 删除遠端分支
    $ git push origin --delete [branch-name]
    $ git branch -dr [remote/branch]

           

6、标簽

# 列出所有tag
    $ git tag

    # 建立一個tag在目前commit
    $ git tag [tag]

    # 建立一個tag在指定commit
    $ git tag [tag] [commit]

    # 删除本地tag
    $ git tag -d [tag]

    # 删除遠端tag
    $ git push origin :refs/tags/[tagName]

    # 檢視tag資訊
    $ git show [tag]

    # 送出指定tag
    $ git push [remote] [tag]

    # 送出所有tag
    $ git push [remote] --tags

    # 建立一個分支,指向某個tag
    $ git checkout -b [branch] [tag]

           

7、檢視資訊

# 顯示有變更的檔案
$ 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

           

8、遠端同步

# 克隆遠端倉庫
$ git clone [url]

# 下載下傳遠端倉庫的所有變動
$ git fetch [remote]

# 顯示所有遠端倉庫
$ git remote -v

# 顯示某個遠端倉庫的資訊
$ git remote show [remote]

# 增加一個新的遠端倉庫,并命名
$ git remote add [shortname] [url]

# 取回遠端倉庫的變化,并與本地分支合并
$ git pull [remote] [branch]

# 拉取遠端分支,同時建立本地分支
$ git fetch [remote] 遠端分支名x:本地分支名x
# 拉取遠端分支,同時建立本地分支,且切換到該分支
$ git checkout -b [branch] [origin/遠端分支名]

# git pull相當于以下兩步
# 1、拉取遠端分支
$ git fetch [remote] [branch]
# 2、合并到目前分支
git merge [remote/branch]

# 上傳本地指定分支到遠端倉庫
$ git push [remote] [branch]

# 強行推送目前分支到遠端倉庫,即使有沖突
$ git push [remote] --force

# 推送所有分支到遠端倉庫
$ git push [remote] --all

# 更新遠端分支清單
$ git remote update [remote] --prune
$ git remote update [remote] -p

# 删除和遠端倉庫的關聯
$ git remote rm [remote]

           

9、撤銷

# 恢複暫存區的指定檔案到工作區
$ git checkout [file]

# 恢複某個commit的指定檔案到暫存區和工作區
$ git checkout [commit] [file]

# 恢複暫存區的所有檔案到工作區
$ git checkout .

# 重置暫存區的指定檔案,與上一次commit保持一緻,但工作區不變
$ git reset [file]

# 重置暫存區與工作區,與上一次commit保持一緻
$ git reset --hard

# 重置目前分支的指針為指定commit,同時重置暫存區,但工作區不變
$ git reset [commit]

#  回退到上一次送出
$ git reset --hard HEAD^
# 重置目前分支的HEAD為指定commit,同時重置暫存區和工作區,與指定commit一緻
$ git reset --hard [commit]

# 重置目前HEAD為指定commit,但保持暫存區和工作區不變
$ git reset --keep [commit]

# 建立一個commit,用來撤銷指定commit
# 後者的所有變化都将被前者抵消,并且應用到目前分支
$ git revert [commit]

# 暫時将未送出的變化移除,稍後再移入
$ git stash
$ git stash pop

           

四、在開發工具中使用Git

在Git中一些操作例如

解決沖突

分支比較

等等使用圖形化的操作可能會更加友善快捷。

TortoiseGit是一款不錯的圖形化Git工具,是一個不錯的選擇,下載下傳位址:https://tortoisegit.org/download/

Git全棧開發者使用指南

當然,使用開發工具內建Git,也是一個不錯的選擇。

1、在IDEA中使用Git

IDEA是目前最好用的Java開發IDE,IDEA預設內建了對Git的支援,隻需要配置設定執行程式即可。

1.1、配置Git

  • File

     --> 

    Settings

    --> 

    Version Control

    Git

    ,修改Git執行路徑為自己安裝的Git路徑。
Git全棧開發者使用指南
  • 點選Test,配置成功會提示Git版本資訊
Git全棧開發者使用指南

1.2、遠端操作

Idea中可以非常便捷的進行遠端倉庫相關的操作。

1.2.1、拉取代碼

通過Idea可以直接拉取遠端倉庫的代碼

  • File

    New

     ---> 

    Project From Version Controller

    Git

Git全棧開發者使用指南
  • 填入遠端倉庫位址,選擇 

    Clone

這樣遠端倉庫的代碼就克隆到了本地。

1.2.2、拉取遠端分支

上面我們拉取的是遠端倉庫主幹代碼,我們也可以拉取遠端分支代碼。右下角,點開分支。

Git全棧開發者使用指南

可以看到 

Remote Branchs

,下面就是遠端倉庫的分支。點選遠端分支,

Checkout As

,就可以把遠端分支拉到本地了。

1.2.3、更新代碼

我們在送出代碼前最好先更新下遠端倉庫的代碼到本地倉庫,這樣可以減少不必要的沖突,更新update可以直接通過快捷鍵 

Ctrl + T

,也可以通過工具欄上按鍵來實作:

Git全棧開發者使用指南

1.2.4、送出/推送代碼

在IDEA中開發好自己的代碼之後如何送出到遠端倉庫呢?

右鍵項目

-->

Git

Git全棧開發者使用指南
  • 1.Commit Directory:commit代碼(将stage區的暫存檔案送出到目前分支的本地倉庫,并清空stage區),也可以push代碼(把本地倉庫的檔案同步到遠端倉庫)。
Git全棧開發者使用指南
    • Commit對應Git的Commit指令,commit到本地倉庫
    • Commit and Push也就是Commit和push,我們可以直接在這裡commit到本地倉庫之後,再push到遠端倉庫。
在IDEA中,我們會看到檔案被辨別着不同顔色:紅色,綠色,藍色。它們分别代表什麼意思呢?
  • 紅色:未被版本控制的檔案,即未添加到版本控制的檔案,例如我們添加到ignore中的檔案。
  • 綠色:新加入版本的檔案,即我們新建立的檔案,還未送出到遠端倉庫。
  • 藍色:修改過的檔案,即遠端倉庫中已有該檔案,我們這次對它進行了修改,但是還未送出。

這裡再接着看看幾個按鍵的作用:

Git全棧開發者使用指南

2.Add:把本地檔案從工作目錄添加到本地倉庫的stage區,對應Git的Add指令。

3.Compare with Branch…:與遠端分支比較。我們送出前可以通過此功能比較下我們工作目錄中代碼和遠端分支代碼的異同。

4.Show History:檢視曆史修改版本記錄。

5.Revert:復原,會将你的本地修改復原。

6.Repository:各種倉庫指令。

Git全棧開發者使用指南

1.3、分支管理

1.3.1、建立分支

點選New Branch可以建立分支

Git全棧開發者使用指南

1.3.2、分支切換/比較/合并/重命名/删除

在Idea中這些功能的使用也常簡單,點選分支,點選要操作的分支,就可以看到這些選項

Git全棧開發者使用指南

1.4、檢視送出曆史

Version Controller

log

可以檢視送出曆史

Git全棧開發者使用指南

1.5、合并(處理沖突)

上面我們提了分支合并,可以從本地分支合并,也可以從遠端倉庫合并,一般兩個并行開發的分支合并都是會有沖突,Idea中合并沖突是非常友善的。

  • 在合并過程中發生了沖突,Idea會提示沖突,選擇

    Merge

Git全棧開發者使用指南
  • Idea提供了三個分欄,我們可以點選箭頭,很友善地處理沖突
  • 如果合并時沒有處理,也可以在

    Version Controller

    中處理
Git全棧開發者使用指南

2、在VS Code中使用Git

VS Code是目前最流行的前端開發工具,VS Code對Git的支援不是那麼強大,但是可以通過插件來增強Git功能。

2.1、基本使用

2.1.1、基本界面

我的VS Code配置了中文包。

點選左側Git辨別,可以看到很多的操作。

2.1.2、檔案狀态

當對檔案進行修改後,有三種狀态

Git全棧開發者使用指南
  • M 是 modify 的縮寫即該檔案存在修改
  • D 是 delete 的縮寫即該檔案被删除了
  • U 是 Update 的縮寫即該檔案是新添加

2.1.3、送出代碼

Git全棧開發者使用指南

檔案按鈕的的意思。

  • 如果是新添加的檔案,放棄修改就會提示徹底删除檔案。
  • 如果是删除的檔案,選擇放棄修改就會從倉庫中恢複檔案 (再也不用擔心誤删的檔案找不到了)
  • 點選 + 号确認檔案的修改就會提到 stash Changes 上 

    (對應 git add 指令)

Git全棧開發者使用指南

确認了檔案之後,在輸入框輸入這次更新的内容,然後點選打勾就可以儲存這一次更新了 

(對應 git commit 指令)

如果目前所有的 Changes 都要 commit ,那可以直接輸入上傳的資訊并且打勾就可以快速 commit 了。

2.1.4、推送代碼

完成送出以後,vscode 的左下角就會出現上箭頭的數字為 1 (上箭頭是 push 的更新,下箭頭是可以 pull 的更新)

當然如果之前沒有 push 過代碼的話,這個可能會沒有數字顯示。

這個時候就可以将代碼推送到 遠端倉庫上了 

(對應 git push 指令)

Git全棧開發者使用指南

OK,遠端倉庫就可以看到我們的送出了。

Git全棧開發者使用指南

2.1.5、拉取代碼

也可以通過 vscode 左下角的下箭頭看到倉庫是否可以 拉取,然後點選菜單的 git pull 進行倉庫更新 (對應 

git pull

 指令)

Git全棧開發者使用指南

2.1.5、分支切換

vscode 可以直接在左下角建立分支,也可以切換分支。

Git全棧開發者使用指南
上面的功能滿足了基本要求,如果還需要

代碼比對

解決沖突

,可以選擇插件,目前公認的最好用的插件是GitLens。

2.2、使用Git插件

2.2.1、安裝GitLens

打開插件商店,搜尋 

GitLens

,安裝即可。

Git全棧開發者使用指南

2.2.2、GitLens基本使用

安裝完成之後側邊的工具欄會多出一個 git 分支圖示,點選就可以檢視更詳細的資訊了。

Git全棧開發者使用指南
  • 第一個折疊面闆檢視所有送出
  • 第二個折疊面闆檢視目前打開檔案的曆史
  • 第三個折疊面闆檢視分支
  • 第四個折疊面闆檢視遠端
  • 第五個折疊面闆檢視stash的檔案
  • 第六個折疊面闆檢視标簽
  • 第七個折疊面闆可以比較不同的分支标簽的檔案差別

同時發現,每一行代碼都會顯示送出人和送出資訊

Git全棧開發者使用指南

2.2.3、檢視更改

修改檔案後,Gitlens 側邊會有顔色塊告訴你代碼的更新情況:

  • 紅色箭頭表示删除
  • 藍色塊表示修改
  • 綠色塊表示增添
Git全棧開發者使用指南

在右上角點選

檢視更改

,可以檢視目前檔案的更改。

Git全棧開發者使用指南
Git全棧開發者使用指南

2.2.4、處理沖突

VScode 内置的 git 會告訴你有沖突的檔案,然後通過 Gitlens 可以快速調整沖突。

Git全棧開發者使用指南

Git全棧開發者使用指南

Git全棧開發者使用指南

https://git-scm.com/downloads

Git全棧開發者使用指南

Git Bash Here

Git全棧開發者使用指南

–global

$ git config --global user.name "test"
$ git config --global user.email [email protected]
           

  • Git全棧開發者使用指南
  • .git

    Git全棧開發者使用指南
    Git全棧開發者使用指南
  • Github

    Git全棧開發者使用指南

Git全棧開發者使用指南

Git全棧開發者使用指南
  • git add

    Staged

  • Modified

    git rm

    Untracked

  • git add

    staged

    git checkout

    unmodify

    git checkout

  • git commit

    Unmodify

    git reset HEAD filename

    Modified

git init

fork

克隆下載下傳

  • HTTPS

    控制台 → 使用者帳戶 → 憑據管理器 → Windows憑據

    Git全棧開發者使用指南
  • SSH

git clone

Git全棧開發者使用指南

Master

git branch develop

Git全棧開發者使用指南

git branch

Git全棧開發者使用指南

git checkout develop

Git全棧開發者使用指南

  • git status

    Git全棧開發者使用指南
  • git add README.md

    git add .

Git全棧開發者使用指南

git commit -m "😀修改了redeme"

Git全棧開發者使用指南
Git全棧開發者使用指南

git log

Git全棧開發者使用指南

git push origin develop

git pull origin develop

Git全棧開發者使用指南
Git全棧開發者使用指南

master

master

git merge develop

develop

master

Git全棧開發者使用指南

git status

git reset --hard HEAD^

Git全棧開發者使用指南

git tag publish/0.0.1

Git全棧開發者使用指南

git tag

Git全棧開發者使用指南

# 在目前目錄建立一個Git代碼庫
    $ git init

    # 建立一個目錄,将其初始化為Git代碼庫
    $ git init [project-name]

    # 下載下傳一個項目和它的整個代碼曆史
    $ git clone [url]

           

# 顯示目前的Git配置
    $ git config --list

    # 顯示 Git 的某一項配置
    $ git config <key>

    # 編輯Git配置檔案
    $ git config -e [--global]

    # 設定送出代碼時的使用者資訊,選擇global即全局配置
    $ git config [--global] user.name "[name]"
    $ git config [--global] user.email "[email address]"

           

# 檢視檔案狀态,檢視目前工作區新增、更改或删除的檔案
    $ git status
     
    # 添加指定檔案到暫存區,可以添加多個檔案,中間以空格隔開
    $ git add [file1] [file2] ...

    # 添加指定目錄到暫存區,包括子目錄
    $ git add [dir]

    # 添加目前目錄的所有檔案到暫存區
    $ git add .

    # 添加每個變化前,都會要求确認
    # 對于同一個檔案的多處變化,可以實作分次送出
    $ git add -p

    # 删除工作區檔案,并且将這次删除放入暫存區
    $ git rm [file1] [file2] ...

    # 停止追蹤指定檔案,但該檔案會保留在工作區
    $ git rm --cached [file]

    # 改名檔案,并且将這個改名放入暫存區
    $ git mv [file-original] [file-renamed]
    
    # 臨時儲存修改,可跨分支
    # save為可選項
    $ git stash [save message]
    # 所有儲存的記錄清單
    $ git stash list
    # 恢複工作進度到工作區,此指令的stash@{num}是可選項,在多個工作進度中可以選擇恢複,不帶此項則預設恢複最近的一次進度相當于git stash pop stash@{0}
    $ git stash pop [stash@{num}]
    # 恢複工作進度到工作區且該工作進度可重複恢複,此指令的stash@{num}是可選項,在多個工作進度中可以選擇恢複,不帶此項則預設恢複最近的一次進度相當于git stash apply stash@{0}
    $ git stash apply [stash@{num}]
    # 删除一條儲存的工作進度,此指令的stash@{num}是可選項,在多個工作進度中可以選擇删除,不帶此項則預設删除最近的一次進度相當于git stash drop stash@{0}
    $ git stash drop stash@{num} 
    # 删除所有儲存
    $ git stash clear

           

# 送出暫存區到倉庫區,如果不加-m,會進入vim編輯器
    $ git commit -m [message]

    # 送出暫存區的指定檔案到倉庫區
    $ git commit [file1] [file2] ... -m [message]

    # 送出工作區自上次commit之後的變化,直接到倉庫區
    $ git commit -a

    # 送出時顯示所有diff資訊
    $ git commit -v

    # 使用一次新的commit,替代上一次送出
    # 如果代碼沒有任何新變化,則用來改寫上一次commit的送出資訊
    $ git commit --amend -m [message]

    # 重做上一次commit,并包括指定檔案的新變化
    $ git commit --amend [file1] [file2] ...
    
           

# 列出所有本地分支
    $ git branch

    # 列出所有遠端分支
    $ git branch -r

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

    # 建立一個分支,但依然停留在目前分支
    $ git branch [branch-name]

    # 建立一個分支,并切換到該分支
    $ git checkout -b [branch]

    # 建立一個分支,指向指定commit
    $ git branch [branch] [commit]

    # 建立一個分支,與指定的遠端分支建立追蹤關系
    $ git branch --track [branch] [remote-branch]

    # 切換到指定分支,并更新工作區
    $ git checkout [branch-name]

    # 切換到上一個分支
    $ git checkout -

    # 建立追蹤關系,在現有分支與指定的遠端分支之間
    $ git branch --set-upstream [branch] [remote-branch]

    # 合并指定分支到目前分支
    $ git merge [branch]
   
    # 檢視分支合并狀态
    $  git rerere status
   
    # 顯示合并沖突解決方案的目前狀态——開始解決前與解決後的樣子
    $  git rerere diff

    # 選擇一個commit,合并進目前分支
    $ git cherry-pick [commit]
    
    #分支重命名
    $ git git branch -m [oldName]  [newName]
    # 删除分支
    $ git branch -d [branch-name]

    # 删除遠端分支
    $ git push origin --delete [branch-name]
    $ git branch -dr [remote/branch]

           

# 列出所有tag
    $ git tag

    # 建立一個tag在目前commit
    $ git tag [tag]

    # 建立一個tag在指定commit
    $ git tag [tag] [commit]

    # 删除本地tag
    $ git tag -d [tag]

    # 删除遠端tag
    $ git push origin :refs/tags/[tagName]

    # 檢視tag資訊
    $ git show [tag]

    # 送出指定tag
    $ git push [remote] [tag]

    # 送出所有tag
    $ git push [remote] --tags

    # 建立一個分支,指向某個tag
    $ git checkout -b [branch] [tag]

           

# 顯示有變更的檔案
$ 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 clone [url]

# 下載下傳遠端倉庫的所有變動
$ git fetch [remote]

# 顯示所有遠端倉庫
$ git remote -v

# 顯示某個遠端倉庫的資訊
$ git remote show [remote]

# 增加一個新的遠端倉庫,并命名
$ git remote add [shortname] [url]

# 取回遠端倉庫的變化,并與本地分支合并
$ git pull [remote] [branch]

# 拉取遠端分支,同時建立本地分支
$ git fetch [remote] 遠端分支名x:本地分支名x
# 拉取遠端分支,同時建立本地分支,且切換到該分支
$ git checkout -b [branch] [origin/遠端分支名]

# git pull相當于以下兩步
# 1、拉取遠端分支
$ git fetch [remote] [branch]
# 2、合并到目前分支
git merge [remote/branch]

# 上傳本地指定分支到遠端倉庫
$ git push [remote] [branch]

# 強行推送目前分支到遠端倉庫,即使有沖突
$ git push [remote] --force

# 推送所有分支到遠端倉庫
$ git push [remote] --all

# 更新遠端分支清單
$ git remote update [remote] --prune
$ git remote update [remote] -p

# 删除和遠端倉庫的關聯
$ git remote rm [remote]

           

# 恢複暫存區的指定檔案到工作區
$ git checkout [file]

# 恢複某個commit的指定檔案到暫存區和工作區
$ git checkout [commit] [file]

# 恢複暫存區的所有檔案到工作區
$ git checkout .

# 重置暫存區的指定檔案,與上一次commit保持一緻,但工作區不變
$ git reset [file]

# 重置暫存區與工作區,與上一次commit保持一緻
$ git reset --hard

# 重置目前分支的指針為指定commit,同時重置暫存區,但工作區不變
$ git reset [commit]

#  回退到上一次送出
$ git reset --hard HEAD^
# 重置目前分支的HEAD為指定commit,同時重置暫存區和工作區,與指定commit一緻
$ git reset --hard [commit]

# 重置目前HEAD為指定commit,但保持暫存區和工作區不變
$ git reset --keep [commit]

# 建立一個commit,用來撤銷指定commit
# 後者的所有變化都将被前者抵消,并且應用到目前分支
$ git revert [commit]

# 暫時将未送出的變化移除,稍後再移入
$ git stash
$ git stash pop

           

解決沖突

分支比較

Git全棧開發者使用指南

  • File

    Settings

    Version Control

    Git

Git全棧開發者使用指南
Git全棧開發者使用指南

  • File

    New

    Project From Version Controller

    Git

Git全棧開發者使用指南
  • Clone

Git全棧開發者使用指南

Remote Branchs

Checkout As

Ctrl + T

Git全棧開發者使用指南

右鍵項目

Git

Git全棧開發者使用指南
Git全棧開發者使用指南
Git全棧開發者使用指南
Git全棧開發者使用指南

Git全棧開發者使用指南

Git全棧開發者使用指南

Version Controller

log

Git全棧開發者使用指南

  • Merge

Git全棧開發者使用指南
  • Version Controller

Git全棧開發者使用指南

Git全棧開發者使用指南

Git全棧開發者使用指南
  • (對應 git add 指令)

Git全棧開發者使用指南

(對應 git commit 指令)

(對應 git push 指令)

Git全棧開發者使用指南
Git全棧開發者使用指南

git pull

Git全棧開發者使用指南

Git全棧開發者使用指南

代碼比對

解決沖突

GitLens

Git全棧開發者使用指南

Git全棧開發者使用指南
Git全棧開發者使用指南

Git全棧開發者使用指南

檢視更改

Git全棧開發者使用指南
Git全棧開發者使用指南

Git全棧開發者使用指南