Git非官方使用總結

原文地址:https://blog.dpf114.top/posts/git-often-used/html

1.什麼版本控制系統

單獨的講版本控制咱們或許不知道它是什麼,可是舉個咱們生活中的小例子,咱們很容易明白它是什麼。java

例如咱們畢業修改無數遍的論文:git

畢業論文最終版
畢業論文最最終版
畢業論文最最最終版
畢業論文最最最最終版
畢業論文最終不改版
畢業論文最終真不改版
畢業論文最終真真不改版
畢業論文最終打死不改版
畢業論文最終打死不改版 2

...

這裏有不少版本,而版本控制系統就是對咱們寫的內容不一樣版本進行控制的系統。github

經常使用的版本控制系統有SVNGit。咱們在實際開發中Git使用的比較多。shell

2.安裝和配置

2.1.安裝

Windowssegmentfault

對於windows只要下載安裝包直接安裝便可。windows

Linux工具

使用apt-get工具下載安裝gitlab

apt-get update
sudo apt-get install git

Macpost

使用brew工具下載安裝

brew install git

2.2.安裝後配置

不論是 Windows 安裝仍是 Linux 安裝,安裝好以後,咱們都先經過以下兩行命令作一個基本配置,目的是爲了區分不一樣開發人員的身份,即每次提交都是由誰提交的。配置方式以下:

git config --global user.name 'username'
git config --global  user.email 'username@qq.com'

配置完成後配置信息存儲在~/.gitconfig文件中

3.基本使用

在基本操做以前咱們要了解一下Git使用的分區

image-20201201160523260

  • 工做區:工做區也就是咱們日常寫代碼的地方
  • 暫存區:經過git add提交後臨時存放代碼的地方
  • 本地庫:經過git commit提交後存放代碼的地方,本地庫保存着歷史版本相關信息。
  • 遠程庫:遠程庫也就是遠程代碼倉庫,例如Gitee、GitHub、gitlab。

3.1.初始化倉庫

初始化倉庫有兩種方式,一種是經過從遠程倉庫克隆,另一種是直接從當前目錄初始化,命令以下:

git init

執行完成後當前目錄下會多出一個 .git 的隱藏文件夾,全部 git 須要的數據和資源都存放在該目錄中。

3.2.查看倉庫狀態

經過git status命令能夠查看倉庫的狀態。剛初始化的倉庫查看狀態以下:

image-20201201212527656

修改工做區後查看狀態以下圖:

image-20201201212630864

提交暫存區後查看狀態以下圖:

image-20201201212731447

提交到本地倉庫後查看狀態以下圖:

image-20201201212836761

3.3.提交到暫存區

經過git add能夠將工做區的內容提交到暫存區,有如下幾種使用狀況:

git add 具體文件
git add .
git add *

.*都表明提交工做區的全部文件。

3.4.提交到本地庫

經過git commit將暫存區內容提交到本地倉庫,具體使用以下:

git commit -m '提交描述內容'
注意:描述內容不能爲空。建議每次提交寫清楚提交內容,可用於版本回退。

3.5.提交到遠程倉庫

若是是經過克隆的方式初始化倉庫,提交到本地庫後,能夠直接經過git push直接提交到遠程倉庫,若是是經過git init初始化,須要遠程遠程建立好對應倉庫後,讓本地倉庫跟遠程倉庫關聯,讓後再用 git push提交。

關聯遠程倉庫

git remote命令關聯遠程倉庫,格式git remote add 別名 遠程倉庫url,舉例以下

git remote add origin https://github.com/xiaoxiaoshou/testgit.git

這裏的url你可能兩種類型,分別爲https://github.com/username/reponame.gitgit@github.com:username/reponame.github.io.git,表明着git兩種不一樣的鏈接方式。

其餘關聯遠程倉庫相關命令:

# 查看關聯了哪些遠程分支
git remote -v
# 刪除關聯分支
git remote remove 別名

提交到遠程倉庫

提交命令格式git push 別名 分支名,舉例以下:

git push origin master

3.6.從遠程拉取代碼

經常使用有如下兩種方式:

1.使用git clone

默認從遠程master分支拉取:

git clone 遠程url地址

指定分支拉取:

git clone -b 分支名稱 遠程url地址

使用git pull

使用格式git pull <遠程主機名> <遠程分支名>:<本地分支名>

例如咱們要將遠程 origin 的 master 分支拉取過來,與本地的 master 分支合併

git pull origin master:master

咱們也能夠簡化爲

git pull origin master
git pull origin 
git pull
git pull = git fetch+git merge,fetch的做用是從遠程拉取代碼,merge的做用是合併代碼(後面分支管理有詳細解析)

4.代碼撤銷與版本回退

4.1.查看提交記錄

使用git log能夠查看提交過的信息,每次提交(git commit)到本地倉庫的詳細信息,每條提交信息大體以下:

commit cdc2ac8c3b6d9f8bde05140aca484aa4482f8895
Author: xiaoxiaoshou <446933040@qq.com>
Date:   Tue Dec 1 15:41:13 2020 +0800

    提交描述內容

commit後面的編號是每次提交的一個索引(咱們能夠叫它版本號),用於版本前進或後退

使用git log顯示的內容過多,咱們通常使用下面兩個比較簡潔的查看方式:

# 推薦使用
git reflog

git log --online

4.2.工做區代碼撤銷

可能有一天你正在寫代碼,寫了好久發現寫錯了,想恢復到一開始的狀態,一個笨辦法就是把剛剛寫的代碼一行一行的刪除,不過這種方式成本過高,能夠經過 git checkout -- <file> 命令來撤銷工做區的代碼修改。以下圖:

image-20201201213326906

4.3. 添加到暫存區代碼撤銷

想要撤銷提交到暫存區的代碼分如下兩步:

  • 1.將暫存區代碼撤銷到工做區git reset HEAD
  • 2.將工做區代碼撤銷(和工做區代碼撤銷同樣)git checkout -- file

image-20201201214340348

4.4.提交到本地倉庫代碼版本回退

基於索引版本回退(推薦使用)

1.查看提交歷史

2.使用git reset --hard [局部索引值]回退(可前進和後退)

image-20201201220450928

使用^符號

git reset --hard^
一個 ^回退一步

使用~符號

git reset --hard~n
n表明後退步數

git reset 中三個參數比較

git reset --soft
git reset --mixed
git reset --hard
  • --soft

    • 僅僅在本地庫移動 HEAD 指針
  • --mixed

    • 在本地倉庫移動HEAD指針
    • 重置暫存區
  • --hard

    • 在本地庫移動 HEAD 指針
    • 重置暫存區
    • 重置工做區

4.5.提交到遠程倉庫版本回退

因爲遠程倉庫與本地倉庫內容一致,因此須要遠程倉庫版本回退只須要本地版本回退再提交到遠程倉庫便可。

5.分支管理

5.1. 什麼是分支

咱們在完成一個項目時,不多是「單線程」開發的,不少時候任務是並行的。舉個栗子:項目 2.0 版本上線了,如今要着手開發 3.0 版本,同時 2.0 版本可能還有一些 bug 須要修復,這些 bug 修復以後咱們可能還會發 2.1,2.2,2.3 這些版本,咱們不可能等全部 bug 都修復完了再去開發 3.0 版本,修復 2.0 的 bug 和開發 3.0 的新功能是兩個並行的任務,這個時候咱們 3.0 的功能開發直接在 master 分支上進行確定不合適,咱們要保證有一個穩定,能夠隨時發版本的分支存在(通常狀況下這個角色由 master 分支來扮演),此時咱們就能夠靈活的使用 Git 中的分支管理功能:

  1. 建立一個長期分支用來開發 3.0 功能,假設這個分支的名字就叫 v3,咱們在 v3 上添加新功能,並不斷測試,當 v3 穩定後,將 v3 合併到 master 分支上。
  2. 建立一個特性分支用來修復 2.0 的 bug ,一旦 bug 修復成功,就將該分支合併到 master 上,一旦發現新 bug ,就立馬再建立分支進行修復,修復成功以後再合併。

5.2.查看分支

咱們可使用命令git branch來查看當前倉庫有哪些分支和咱們當前所處的分支

image-20201202141956421

前面帶*的分支爲咱們當前所處分支。

5.3.建立並切換分支

第一種方法

  • 先用git branch 分支名建立分支
  • 而後再用git checkout 分支名切換分支

第二種方法

使用git checkout -b 分支名建立和切換分支一步到位。

image-20201202142619661

5.4.整合分支

分支的整合有兩種形式,一種是merge,另一種是rebase

merge

使用命令git merge [有新內容的分支名]合併分支。

image-20201202155544955

上圖解釋:主分支在m1時發現有bug,因而切出一個分支bugFix,通過一段時間,主分支開發到m3,bugFix分支(已提交爲m2)bug已經解決,這時候須要將bugFix分支合到主分支即便用命令git merge bugFix

rebase

rebase 又叫變基,使用命令git rebase [有新內容的分支]能夠變基。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-asHdOBrc-1607004130806)(/Users/dpf/Library/Application Support/typora-user-images/image-20201202213338236.png)]

上圖解析:上圖是在主分支使用命令git rebase bugFix進行整合分支,整合過程是將bugFix的提交記錄在主分支自底向上再提交一遍。

merge和rebase的區別

  • merge是把當前分支和要合併的分支合併在一塊兒,進行一次commit提交
  • rebase是把要rebase分支的歷史提交在當前分支按順序從新提交,rebase以後HEAD的位置不變(也就是圖中的*)
  • rebase過程當中可能產生衝突,解決衝突後繼續提交

    • 解決衝突
    • 提交到緩衝區git add .
    • 繼續完成合並git rebase --continue

    如下是衝突部份內容

    <<<<<<< HEAD
    須要合併分支的內容
    =======
    當前分支內容
    >>>>>>>

6.標籤管理

咱們能夠給某一個提交打上一個標籤,以示重要。比較有表明性的打標籤用它來發布對應的應用的版本好比v1.0、v2.0。Git支持兩種標籤:輕量標籤(lightweight)與附註標籤(annotated)。

咱們能夠用如下命令查看倉庫中全部標籤:

git tag

6.1.輕量標籤

輕量標籤很像一個不會改變的分支——它只是某個特定提交的引用。輕量標籤本質上是將提交校驗和存儲到一個文件中——沒有保存任何其餘信息。

輕量標籤打標籤格式git tag 標籤名稱,舉例以下:

git tag v0.0

輕量標籤默認是對最新的commit進行。

咱們也能夠對指定commit進行打標籤,格式git tag 標籤名稱 commi對應索引。舉例以下

# 查看commit索引
git reflog
# 打標籤
git tag v0.01 bcde256

咱們也能夠刪除掉本地倉庫上的標籤,格式git tag -d 標籤名稱,舉例:

git tag -d v0.01

6.2.附註標籤

附註標籤是存儲在倉庫中一個完整對象,它有本身的校驗和信息,其中包含標籤者的名字、電子郵件、日期時間,此外還有一個標籤信息。可使用 GNU Privacy Guard (GPG) 簽名並驗證。

打附註標籤格式 git tag -a 標籤名稱 -m '標籤信息' ,舉例以下:

git tag -a v1.0 -m 'my version 1.0'

6.3.將標籤推送到遠程倉庫

默認狀況下,git push 命令並不會傳送標籤到遠程倉庫。須要咱們手動將標籤推送到遠程倉庫,推送格式git push 遠程分支別名 標籤名,舉例:

git push origin v1.0


參考資料:

https://git-scm.com/book/zh/v2

https://www.runoob.com/git/git-tutorial.html

http://www.javashuo.com/article/p-bieohdqv-nu.html

邊學習邊玩會遊戲:https://learngitbranching.js.org/?locale=zh_CN

相關文章
相關標籤/搜索