git 操做整理(基礎篇)

0. 前言

這是程序鍋對以前學習和使用 Git 作的一份整理,後頭繼續使用和學習 Git 的話,還會更新這分內容,因此喜歡的話能夠關注一波【多選參數】哦,會第一時間在【多選參數】發佈的。所以,這份就算是 v1.0 版本的吧。另外,附上了本篇內容的提綱,後頭還會有幾篇關於 Git 的,每篇都有這樣的一份提綱。前端

1. Git 的三個區域

在正式 git 以前,咱們先來了解一下 git 的 3 個區域,分別是工做目錄、暫存區、版本歷史。這個知識點是尤其重要的,在理解了這三個區域以後,git 的操做纔會顯得很容易。git

  • 工做目錄是直接跟文件相關的,好比被 git 管理起來的文件被修改了的話,在使用 git status 命令查看的時候會顯示出來。顯示的內容就是相比以前的版本 A 變動了的哪些文件;
  • 當使用 git add 命令以後,文件修改的東西就被提交到暫存區了,而工做目錄中版本是變化以後了的,好比版本 B。那麼使用 git status 以後,暫存區顯示的內容是相對版本 A 的變化的文件信息,也至關因而版本 B 的狀況;
  • 當使用 git commit 以後,這個更改就被提交到了版本歷史中,那麼版本歷史就從版本 A 變到了版本 B;

2. Git 基礎使用

2.1. Git 配置相關

在使用 Git 管理文件系統的時候,須要進行一些配置,好比用戶信息的配置。 Git 管理文件系統主要分爲三個層次,以下所示(PS:只輸入下面這些命令是不行的)web

# config的三個做用域
# 缺省等同於local $ git config --local # local只對某個倉庫有效 $ git config --global # global對登陸用戶全部倉庫有效,在用戶根目錄下,好比 root 用戶就在 /root 目錄下有個關於 git 的配置文件 $ git config --system # system對系統全部登陸的用戶有效,基本不用 複製代碼

優先級 local > global > system,也就是說當對一個倉庫同時設置了 global 和 local 那麼採用local配置的信息。後端

  • 查看配置信息bash

    有些時候咱們也會查看 Git 配置信息等,使用以下命令能夠查看相應層次的配置信息dom

    # 顯示 config 的配置 加--list
    $ git config --list --local # 這個只能在git倉庫中使用 $ git config --list --global $ git config --list --system 複製代碼
  • 配置信息---以用戶信息爲例編輯器

    $ git config --global user.name 'your_name '                                             
    $ git config --global user.email 'your_email@domain.com' 複製代碼

    Git 相對於其餘版本控制系統須要這些信息,是由於在版本控制中,作出的修改是跟這些用戶信息捆綁在一塊兒的。綁定的 email 是爲了,當評審人員對代碼提出了相應的修改,那麼 Git 管理系統會對修改代碼的提交者綁定的 email 發送郵件。因此email 須要是一個有效的 email,能收的到郵件的 email。學習

  • 清除配置信息ui

    $ git config --unset --local user.name
     $ git config --unset --global user.name 複製代碼

2.2. 創建 Git 倉庫

  • 把已有的項目代碼歸入 Git 管理
$ cd 項目代碼所在的文件夾
$ git init 複製代碼
  • 新建的項目直接用Git管理
$ git init your_project # 會在當前路徑下建立和項目名稱同名的文件夾
$ cd your_project 複製代碼

2.3. 倉庫管理經常使用命令

  • git add 主要是把新文件或者文件變更的狀況添加到暫存區spa

    $ git add readme.md # 將 readme.md 文件添加到暫存區
    $ git add . # 將當前工做目錄的全部文件添加到暫存區 $ git add -u # 把修改以後的文件(這些文件已經被管理起來了)一次性提交到暫存區 複製代碼

    暫存區的文件也是至關於被 git 管理了的。

  • git status 能夠查看工做目錄和暫存區的狀態

    $ git status
    複製代碼

    Tips:假如 bash 有顏色顯示的話,會看到紅色是表明工做目錄,綠色表明暫存區。

  • git commit 命令進行提交,提交的歷史會被記錄下來

    $ git commit -m 'Add readme.md' # -m 指定 commit 的信息
    $ git commit # 這時候會跳出一個文本輸入界面,讓你輸入更多的 commit 信息 複製代碼
  • git mv 將 git 管理的文件進行重命名

    git mv readme readme.md # 使用git的方式對文件進行重命名
    複製代碼
  • git rm 從 git 管理的文件刪除某個已管理的文件,同時把修改的狀況添加到暫存區

  • git log 命令查看提交歷史,也就是版本演進歷史

    上面已經稍微使用了一下 git log 命令,這邊更加詳細的來闡述這個命令

    git log # 只查看當前分支(Head所指的分支)的log狀況
    git log --oneline # 簡潔的顯示版本更新信息 git log -n2 # n2 表明查看最近兩次commit歷史 git log -2 # 2 表明查看最近兩次commit歷史 git log -n2 --oneline # 簡潔的顯示最近兩次的版本更新信息 git log branch_name # 後面跟上分支名錶示查看該分支的log日誌  git log -all # 列出全部分支的log git log --all --graph # 以圖形化的方式查看 git log --oneline --all # 以簡潔的方式查看全部分支的log git log --oneline --all -n4# 以簡潔的方式查看全部分支的log  git help log # 以web的方式查看log的幫助文檔,等同於 git help --web log # 和上面那條效果同樣 複製代碼

2.4. 分支相關

分支就至關於一個獨立的開發空間,好比前端和後端開發,前端開發能夠創建一個分支,後端開發也能夠創建一個分支,可是彼此在不一樣工做空間裏面工做的時候是互不影響的,當須要集成的時候又能夠把他們集成到一個公共的分支上面去。下面是有關分支的操做:

  • HEAD->temp2 表示當前的 HEAD 指向的是 temp2 分支,那麼其實真正指向的是該分支最後一次 commit

  • git branch 查看分支狀況、建立分支、刪除分支

    git branch -v # 查看本地分支的詳細狀況
    git branch -a # 查看全部分支,包括遠端分支,但沒有過於詳細的信息 git branch -av # 查看全部分支狀況  git branch branch_name hash_value # 建立一個新的分支,基於 hash_value 的這個 commit 建立一個新的分支,hash_value 能夠省略,那麼默認是基於當前分支的最後一個 commit 建立。  git branch -d branch_name git branch -D branch_name # 這個分支已經有了一些 commit 複製代碼

    以下圖所示,要想刪除 temp 分支就得用 -D

  • git checkout 切換分支或者建立分支

    git checkout branch_name # 切換分支
    git checkout master  git checkout -b branch_name git_id # 建立一個新的分支並切換過去,git_id能夠是hash_value,也能夠是某個分支的名字(分支的名字其實就指向了某個 commit) git checkout -b temp 9ef147d git checkout -b temp2 master 複製代碼

    切換分支,必須在.git的同級目錄下執行

2.5. 比較 --- git diff

2.5.1. 不一樣 commit、分支 之間進行比較

git diff hash_value1 hash_value2 # hash_value1 對應的 comimit 和 hash_value2 對應的 commit 進行比較
git diff hash_value1 hash_value2 -- file_name1 file_name2 # 在上述基礎之上,只比較 file_name一、file_name2 這兩個文件  git diff branch_name1 branch_name2 # 對兩個分支進行比較 git diff branch_name1 branch_name2 -- file_name1 file_name2  git diff HEAD HEAD^ # HEAD 指向的 commit 與該 commit 的父親 commit 進行比較 git diff HEAD HEAD^1 # 同上 git diff HEAD HEAD^^ # HEAD 指向的 commit 與該 commit 的父親的父親 commit 進行比較  git diff HEAD HEAD~ # HEAD 指向的 commit 與該 commit 的父親 commit 進行比較 git diff HEAD HEAD~1 # 同上 git diff HEAD HEAD~~ # HEAD 指向的 commit 與該 commit 的父親的父親 commit 進行比較 git diff HEAD HEAD~2 # 同上 複製代碼

1.能夠直接使用 HEAD,由於 HEAD 實際上指向的是某個 commit 的。同理,比較兩個分支的差別其實就是比較兩個分支最近 commit 的差別,由於分支名其實就是一個指針,指向的仍是分支最近的 commit。

2.^ 後面只能跟數字1,一個 ^ 就表示往父親 commit 這邊追溯一個,以此類推

3.~ 後面跟任何數字均可,一樣一個 ~ 就表示往父親 commit 這邊追溯一個,以此類推

2.5.2. 暫存區和 HEAD 作比較

git diff --cached
複製代碼

好比一開始的話,HEAD 、暫存區和工做目錄都是同樣的,都是狀態A,而且 readme*.md 文件都已經被跟蹤起來了。下面咱們修改 readme3.md 文件,以後把它 add 到暫存區。而後使用上述命令進行比較,由於 HEAD 中的是歷史,尚未被更新,是狀態 A,而暫存區是狀態 B,因此能夠顯示出差別。

2.5.3. 工做目錄和暫存區作比較

git diff      # 對全部文件進行比較
git diff -- file_name1 file_name2 # 對指定文件進行比較 複製代碼

好比一開始的話,HEAD 、暫存區和工做目錄都是同樣的,都是狀態A,而且 readme*.md 文件都已經被跟蹤起來了。下面咱們修改 readme3.md 文件,可是不 add 到暫存區,而後使用上述命令進行比較,因爲readme3.md 是在工做區中已經被更改了,工做區是版本 B,而暫存區還沒更新是版本 A,因此進行比較會有以下結果。

本文使用 mdnice 排版

相關文章
相關標籤/搜索