天天看點

Git的使用Git的使用

文章目錄

  • Git的使用
    • Git的由來
    • git的安裝
    • git的存儲圖解
    • git的使用
      • 常用操作
      • 1.初始化一個版本庫
      • 2. 添加檔案到版本庫中
    • Git的檔案分類
    • 檔案的生命周期
    • git的送出
    • 增補
    • diff比較差異
    • HEAD
    • 檢出checkout和重置
    • 移動和删除
    • 配置本地使用者名和郵箱
    • push到遠端伺服器
    • 從遠端庫克隆
      • SSH遠端連結庫克隆
    • 分支管理

Git的使用

Git的由來

Linux核心代碼需要版本管理工具管理代碼,2002年開始,使用的是BitMover公司的BitKeeper這個商用軟體。但 是Linux社群崇尚的是自由軟體相悖。

2005年,Andrew Tridgell對BitKeeper的協定進行逆向工程,BitKeeper作者決定收回無償使用授權。磋商無果, Linus又找不到合适的版本管理工具,決定自行開發分布式版本管理工具,一個月後,Linux核心代碼被Git接管。

2008年,基于WEB使用Git進行版本控制的軟體托管服務的網站GitHub上線。

2016年5月9日,11年後,BitKeeper開源,釋出在了GitHub上。

2018年6月4日,微軟宣布,通過75億美元的股票交易收購代碼托管平台GitHub。

git的安裝

https://git-scm.com/downloads下載下傳對應作業系統的git用戶端版本

  • Linux上安裝
    1. 從RHEL上安裝非常簡單
      yum install git
  • windows上安裝
    1. 下載下傳對應版本的32位或64位版本,點選安裝即可
    2. windows上安裝後點選滑鼠右鍵菜單中的

      Git Bash Here

      可以在目前目錄打開git操作指令視窗。
      Git的使用Git的使用
    3. 使用

      git --version

      可以檢視目前git的版本資訊
      Git的使用Git的使用

git的存儲圖解

Git的使用Git的使用

說明:

名稱 意義 解釋
Remote 遠端版本庫 網絡上的另一個版本庫,可以和本地庫互動
Repository 創庫、版本庫 git初始化後,會在目前目錄生成一個.git目錄,這就是版本庫
index 索引 介于工作區和版本庫之間,暫存修改的,(暫存區)
Workspace 工作空間、版本庫 .git檔案所在的目錄就是工作區,一般是項目的根目錄
  • git init,可以為目前目錄建構git版本管理
    1. 在版本庫中,建立一個檔案,那麼這個檔案在Workspace(工作區)中
    2. 使用

      git add filename

      将filename檔案添加到index(暫存區)中
    3. 使用

      git commit filename

      将filename檔案從index(暫存區)添加到創庫(Repository)中。
    4. 使用

      git push

      将本地倉庫(Repository)添加到遠端倉庫Remote中。

git的使用

  • 操作類
指令 意義

git init

初始化目前目錄,為目前目錄添加版本管理(初始化一個版本庫)

git add filename

将filename檔案加入版本管理

git commit filename[-m "注釋"]

将filename從index(暫存區)添加一個到本地廠庫(Repository)中。-m 可選參數,為目前操作添加注解。

git push

将本地倉庫(Repository)添加到遠端倉庫Remote中。
  • 檢視資訊類
指令 意義

git status [-s|--short]

檢視狀态, -s段格式輸出

git log

檢視版本庫裡面送出的曆史記錄

git reflog

顯示commit的資訊,隻要HEAD發生變化,就可以在這裡看到

git log --graph --pretty=oneline --abbrev-commit

檢視分支結構示意圖

常用操作

git add filename

#單個檔案添加

* 這一步是吧檔案的目前變化增加到索引中,也就是以後這個檔案需要版本庫來跟蹤管理。注意這不是送出。此時,檔案還可以繼續修改,還可以添加新的被跟蹤檔案。一定要add才能把這些改變加入到索引中

git add .

#批量添加檔案

* .點号,代表目前目錄,這條指令将遞歸添加目前目錄及其子目錄所有檔案

* 隻要是目錄,就會遞歸添加該目錄下的檔案和子目錄。

git status

#檢視狀态

* -s,–short #段格式輸出

git commit -m "為本次送出添加備注"

#送出更改到版本庫

* -m 填寫本次日志消息,必須寫。工作中,程式員應該對每一次送出寫明做了什麼改動

1.初始化一個版本庫

  • 使用指令

    git init

    可以初始化一個版本庫
  • 會在目前目錄中增加一個.git目錄,不要自行修改這個目錄裡面的檔案。目前目錄一般是項目的根目錄。
  1. 選擇一個目錄在該目錄下代開

    Git Bash Here

    ,輸入指令

    git init

    可以為該目錄添版本管理
    Git的使用Git的使用

2. 添加檔案到版本庫中

  • 注意,如果已經添加檔案到版本庫後,如果檔案再次被修改,需要再次add添加和再次commit
  1. 在管理目錄下面建立一個檔案abc.html
    touch abc.html
  2. 檢視狀态
    git status
    Git的使用Git的使用
  3. 添加abc.html到管理目錄中,再次檢視可以看到檔案字元顔色為綠色,前面描述為new file
    git add abc.html
    Git的使用Git的使用
  4. 添加abc.html到本地創庫中
    git commit abc.html -m “1. 第一次送出”
    Git的使用Git的使用

Git的檔案分類

  • 使用git status可以檢視git管理的目錄狀态,通常有如下特征:
    1. 紅色,前面沒檔案描述:表示檔案未添加到git管理庫中,即檔案未管理
    2. new file(綠色):表示該檔案為一個新檔案,在index索引庫中。還未送出到Repository倉庫
  • Untracked files:沒有跟蹤的檔案
  • 追蹤的Tracked,已經加入版本庫的檔案
  • 未追蹤的Untracked,未加入到版本庫的未被管理的檔案
  • 忽略的ignored,git不在關注的檔案,例如一些臨時檔案

注意:如果在版本管理目錄中需要對一些檔案不做版本管理,生成一個

.gitignore

檔案在管理目錄的根目錄下。檔案内容為不需要管理的檔案。(如果需要對某個目錄不做版本管理,目錄以/結尾)

*.ipynb
__pycache__/
.python-version
           
  • python項目中常用的忽略檔案下載下傳位址https://github.com/github/gitignore/blob/master/Python.gitignore
  • 其它語言的在這裡找 https://github.com/github/gitignore

檔案的生命周期

Git的使用Git的使用
  1. 檔案add後,就成為可跟蹤檔案的未修改狀态unmodified。
  2. 修改後,檔案就變成modified狀态。
  3. 再次add後,将變化送出到索引,狀态變為staged。
  4. commit後,送出成功,檔案狀态從staged變回unmodifiled

git的送出

  • git的送出分為兩個步驟:
    1. 暫存變更:add作用是把新檔案或者檔案新的改動添加到一個暫存區stage,也就是加入到index中
    2. 送出變更:commit送出的是暫存區中的改動,而不是實體檔案目前的改動,送出到目前分支,預設是master分支

git的送出過程中,也可以直接使用commit将兩步合成一步。

git commit index.html

如果改動了一批檔案,一個個寫名字很麻煩,使用下面指令

git commit -a

-a,-all參數,會把所有跟蹤的檔案的該東自動暫存,然後commit。上面指令未送出message,會出現一個類似vi指令的操作界面,需要編寫message之後,才行。也可以使用下面的指令,把message資訊一并填寫了

git commit -a -m “message”

增補

假如第一次送出後,忘記加入一個檔案about.html

$ touch about.htm
$ git add about.htm
$ git commit --amend
[master 40dcd33] Second Commit amend
 Committer: python <[email protected](none)> 
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email [email protected]

If the identity used for this commit is wrong, you can fix it with:

    git commit --amend --author='Your Name <[email protected]>'

 1 files changed, 1 insertions(+), 1 deletions(-)
create mode 100644 about.htm
           
  • --amend

    修改,通過建立一個新的commit來replace目前分支的頂部。

    注意:也可以在指令中繼續使用-m選項直接送出message。

  • git log

    檢視一下版本庫裡面送出的曆史記錄,可以看見修改amend後之前的上一次送出記錄不見了。
  • git reflog

    可以看到真實的操作記錄。

diff比較差異

檢視各種差異

指令 說明

git diff

#檢視被跟蹤檔案未暫存的修改,比較暫存區和工作區

git diff -cached

#檢視被跟蹤檔案暫存的修改,比較暫存區和上一次commit的差異

git diff HEAD

#檢視被跟蹤檔案,比較工作區和上一次commit的差異。HEAD指代最後一次commit(實質是HEAD指針所指向的版本位置)
Git的使用Git的使用

示例代碼:

Git的使用Git的使用
Git的使用Git的使用

HEAD

  • HEAD可以看做是一個遊标,一般是指向目前分支最後一次送出。
  • HEAD的值存儲在.git/HEAD檔案中。是個ID
  • HEAD,指代最後一次commit
  • HEAD^,指代上一次送出
  • HEAD^^,指代上上一次送出
  • 上n次送出,表示為HEAD-n

檢出checkout和重置

checkout 用于切換分支,或恢複工作區檔案。

注意:checkout會重寫工作區,這個指令還是較為危險的。

指令 說明

git checkout

列出暫存區可以被檢出的檔案

git checkout file

從暫存區檢出檔案到工作區,就是覆寫工作區檔案,可以指定檢出的檔案。但是不清除stage

git checkout commit

檢出某個commit的指定檔案到暫存區和工作區

git checkout .

檢出暫存區的所有檔案到工作區
  • 簡單示例:
    Git的使用Git的使用
指令 說明

git reset

列出将被reset的檔案

git reset file

重置檔案的暫存區,和上一次commit一緻,工作區不影響

git reset --hard

重置暫存區與工作區,上一次commit保持一緻
Git的使用Git的使用
Git的使用Git的使用
指令 說明

git reflog

顯示commit的資訊,隻要HEAD發生變化,就可以在這裡看到

git reset commit

重置目前分支的HEAD為指定commit,同時重置暫存區,但工作區不變

git reset --hard [commit]

重置目前分支的HEAD為指定commit,同時重置暫存區和工作區,與指定commit一緻

git reset --keep [commit]

重置目前HEAD為指定commit,但保持暫存區和工作區不變
  • reset操作,要慎重。
Git的使用Git的使用

移動和删除

指令 說明

git mv oldfilepath newfilepath

改名,直接把改名的改動放入暫存區

git rm file

會同時在版本庫和工作目錄中删除檔案,真删除

git rm --cached file

将檔案從暫存轉成未暫存,從版本庫中删除,但不删除工作目錄的該檔案,即檔案恢複成不追蹤狀态
  • 注意:以上都算是改動,必須commit才算真的改動了
  • mv操作
    Git的使用Git的使用
  • rm --cached

    操作
    Git的使用Git的使用
  • rm操作
    Git的使用Git的使用

配置本地使用者名和郵箱

指令 說明

git confit --global user.name "name"

配置全局的使用者名資訊為name

git config --global user.email "email"

配置全局的使用者郵箱為email

git config --global user.name

顯示user.name資訊

git config --global user.email

顯示user.email資訊
  • 注意:上面指令配置的資訊會存放在目前使用者家目錄下面~/.gitconfig檔案中記錄
    Git的使用Git的使用

push到遠端伺服器

  • 使用前提
    1. 自己搭建一個gogs搭建一個github私服,模拟GitHub,或者直接使用github的遠端倉庫。
    2. 本地gogos的廠庫為:http://192.168.61.108:3888/xdd/mypython.git
指令 說明

git remote

列出本地記錄的所有遠端倉庫

git remote -v

詳細列出本地記錄的所有遠端廠庫

git remote add [shortname][url]

在本地記錄一個名稱指向遠端倉庫

git config --system

在/ect/gitconfig檔案中讀寫配置檔案

git config --global

在~/.gitconfig檔案中讀寫配置檔案
  • 推送相關指令

    |指令|說明|

    |:—|:—|

    git push origin master

    |指定推送到遠端主機和分支

    git push origin

    |指定目前分支推送到的遠端主機和對應分支

    git push -u origin master

    |指定遠端預設主機和分支

    -u 第一次遠端推送的時候加上,以後就可以不使用-u參數,就可以

    git push orgin master

    ,也可以

    git push

    都使用預設。

    git push

    |simple方式,預設隻推送目前分支到預設關聯的遠端倉庫
  • 注意:
    1. 遠端版本庫名一般定義為origin,這是一個習慣的用法,将建立origin和後面url的映射。
    2. 遠端廠庫一般會記錄在工作目錄下.git/config檔案中,一般資訊儲存在.git/config檔案的新的短[remote “origin”]中。
    3. .git/config這檔案時版本庫級别設定檔案。這裡的設定具有最高優先級
git remote add origin http://192.168.61.108:3888/xdd/mypython.git
Git的使用Git的使用

注意:

http://[email protected]:3888/xdd/mypython.git

上加上使用者名,否則push會報401錯誤

  • 修改origin中的url配置
git remote set-url origin http://[email protected]:3888/xdd/mypython.git
Git的使用Git的使用
  • 推送資料
[email protected] MINGW64 /d/MyPythonUse/其他/test2 (master)
$ git push -u origin master
Password:
Enumerating objects: 14, done.
Counting objects: 100% (14/14), done.
Delta compression using up to 8 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (14/14), 1.20 KiB | 122.00 KiB/s, done.
Total 14 (delta 0), reused 0 (delta 0)
To http://192.168.61.108:3888/xdd/mypython.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
           

第一次推送,需要輸入遠端倉庫密碼。輸入密碼就可以連接配接到遠端倉庫了。

推送完成後可以登入遠端廠庫,看到推送的檔案:

Git的使用Git的使用
  • 私有的倉庫,必須登入,隻能使用者自己看,為了友善,修改為公有的。

從遠端庫克隆

本次使用git協定連結遠端庫。

  • 配置本地使用者名和郵箱
    Git的使用Git的使用
  • 為本地生成ssh密鑰
ssh-keygen -t rsa -C "[email protected]"
  • -t指定一個加密算法
  • -C comment描述資訊。注解
  • 注意:生成的密鑰檔案為:

    id_rsa

    id_rsa.pub

    在目前使用者的家目錄下面.ssh檔案夾下
    1. id_rsa

      為生成的私鑰
    2. id_rsa.pub

      為生成的公鑰
      Git的使用Git的使用

使用web代開遠端git平台,操作如下:

Git的使用Git的使用

操作完成後可以看到添加成功

Git的使用Git的使用

那麼SSH登入的使用者使用的連結如圖下:

Git的使用Git的使用

SSH遠端連結庫克隆

在windows上找一個空目錄,執行下面克隆指令。(注意:第一次使用ssh連結有提示,輸入yes即可)

git clone [email protected]:xdd/mypython.git ./
Git的使用Git的使用

克隆成功,下面就可以使用這個初始的項目檔案開發了。

分支管理

指令 說明

git branch

檢視所有分支(被*号标明的是目前使用分支)

git branch dev

建立dev分支

git checkout dev

切換到dev分支

git checkout -b dev

建立dev分支,并切換到dev分支

git merge dev

合并dev分支到目前分支(預設為Fast forward快進模式合并,不會真的合并檔案到目前分支,隻是建構個連結)

git merge --no-ff -m "備注" dev

合并目前分支到dev分支,禁用Fast forward。(會真的合并檔案到目前分支上)

git branch -d dev

删除dev分支

git branch -D dev

強行删除dev分支