1. 程式人生 > >Python視訊學習(十三、Git)

Python視訊學習(十三、Git)

目錄

參考資料:
廖雪峰Git

命令 說明
git init 建立Git目錄
git add 檔案 新增檔案到工作區
git commit -m "訊息" 提交
git log 檢視提交記錄
git status
檢視工作區狀態
git reset --hard HEAD^ 回退到上個版本
git reset --hard 版本號 回退到指定版本
git reflog 檢視歷史提交記錄
git checkout -- 檔名 放棄更改
git reset HEAD 檔名 丟棄暫存區的檔案
git diff HEAD -- code.txt 對比HEAD版本和工作區 code.txt檔案的差異
git diff HEAD HEAD^ -- code.txt 比較HEAD與HEAD^版本的code.txt差異
git rm 檔名 將刪除檔案的操作放置在暫存區

1. Git基本操作

建立版本庫

安裝git後,在一個空目錄建立版本庫:

git init 

在這裡插入圖片描述

提交檔案

  • 接著建立一個檔案code.txt,寫入內容,然後再提交檔案到版本
git add code.txt
git commit –m '版本1'

Git的版本名都是Hash值,-m記錄的只是對這個版本的說明提示
**commit只會把暫存區的內容提交,暫存區儲存的是檔案的內容,而不是檔案,如果把檔案提交到暫存區後又進行了修改,那麼之後修改的內容不會被commit儲存

檢視版本資訊

git log

在這裡插入圖片描述

再次修改code.txt,然後將它提交後,再次檢視版本資訊:

git add code.txt
git commit -m "版本2"
git log

回退版本

git reset --hard HEAD^
git reset --hard 版本號

Git中有個HEAD一直是指向最新的版本

在這裡插入圖片描述

HEAD^就代表上一個版本,HEAD^^代表上2個版本, HEAD~5就代表5個版本前

回退版本後,在git log中就看不到後面的版本了,所以此時想回去後面的版本,就使用

git reflog

上面能夠檢視歷史記錄,顯示內容的前面一部分就是版本號的開頭:

在這裡插入圖片描述

就可以使用它來回到之後的版本

git reset --hard ba37943

工作區

自己使用 的檔案放置的地方,叫做工作區

版本庫

工作目錄中的.git資料夾,就是版本庫。git的版本庫裡存了很多東西,包括

  • stage(或者叫index)的暫存區
  • git為我們自動建立的第一個分支master
  • 指向master的一個指標叫HEAD

新增過程:

  • 第一步是用git add把檔案新增進去,實際上就是把檔案修改新增到暫存區;
  • 第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支

在這裡插入圖片描述

檢視工作區狀態

git status

一旦提交後,如果你又沒有對工作區做任何修改,那麼工作區就是“乾淨”的

撤銷修改

將已經staged(暫存區中)的檔案放棄掉

git reset HEAD 檔名

修改了檔案,但是還沒提交到暫存區,放棄修改——讓工作區乾淨:

git checkout -- 檔名

小結:

  • 場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout – file。
  • 場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
  • 場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節

對比檔案差異

  1. 對比工作區和某版本中的檔案差異
git diff HEAD -- code.txt   # 對比HEAD版本和工作區檔案的差異
  1. 對比2個版本中某檔案的差異
git diff HEAD HEAD^ -- code.txt 

刪除檔案

git知道刪除了檔案,因此,工作區和版本庫就不一致了,git status命令會立刻提示哪些檔案被刪除了。

如果要放棄修改,和之前一樣的,reset或者checkout。 如果要提交修改,則執行

git add/rm  檔名

2. Git分支管理

基本命令 含義
git checkout -b <name> 建立+切換分支
git branch 檢視分支, *代表當前分支
git branch <name> 建立分支
git checkout <name> 切換分支,實際上就是改變了HEAD指向
git merge <name> 合併某分支到當前分支
git branch -d <name> 刪除分支
git log --graph --pretty=oneline 檢視分支提交資訊,以圖的形式
git merge --no-ff <name> 合併分支,並且禁用Fast Forward
git stash 儲存工作現場
git stash list 檢視已儲存的工作現場
git stash pop 還原工作現場

git把我們之前每次提交的版本串成一條時間線,這條時間線就是一個分支。截止到目前只有一條時間線,在git裡,這個分支叫主分支,即master分支HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。

a. FastForward合併過程:

  1. 一開始的時候,master分支是一條線,git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點

    每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長。

在這裡插入圖片描述

  1. 當我們建立新的分支,例如dev時,git新建了一個指標叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上

    git建立一個分支很快,因為除了增加一個dev指標,改變HEAD的指向,工作區的檔案都沒有任何變化

在這裡插入圖片描述

  1. 從現在開始,對工作區的修改和提交就是針對dev分支了,比如新提交一次後,dev指標往前移動一步,而master指標不變

在這裡插入圖片描述

  1. 我們在dev上的工作完成了,就可以把dev合併到master上。git怎麼合併呢?最簡單的方法,就是直接把master指向dev的當前提交,就完成了合併——Fast Forward

    並完分支後,甚至可以刪除dev分支。刪除dev分支就是把dev指標給刪掉,刪掉後,我們就剩下了一條master分支
    在這裡插入圖片描述

b. 解決合併衝突

在這裡插入圖片描述

兩個分支對共同的檔案都存在提交,這樣合併就會有衝突

步驟:

  1. 首次合併,git會報錯,告訴你哪個檔案有衝突,需要解決
  2. 開啟那個檔案,裡面會標記衝突的文字,然後自行修改
  3. 修改好衝突後,再次進行提交
  4. 然後再次合併,就解決了
  5. 刪除原分支

分支管理策略

  • Git會盡可能使用FastForward模式
  • 如果有衝突,則會讓使用者自己解決
  • 如果沒有衝突,但是不能執行FastForward,則會進行一次新的提交

比如 主分支修改了某個檔案並且做了提交;dev分支建立了一個新檔案並且做了提交,那麼他們之間沒有衝突,但是需要合併。

git merge -m "資訊" <name>

禁用FastForward模式

如果要強制禁用fast forward模式,git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支資訊

git merge --no-ff -m "資訊" <name>

在這裡插入圖片描述

修復Bug分支

此時在某分支進行工作的時候,需要修復別的分支上的Bug,那麼過程是:

  1. 儲存當前分支的工作現場—— git stash
  2. 切換到需要修復Bug的分支
  3. 建立新的分支來修復Bug
  4. 修復完畢後使用非FF模式來合併分支——git merge --no-ff -m "" <name>
  5. 刪除Bug修復的分支
  6. 切換回之前的工作分支
  7. 還原工作現場 —— git stash pop

3. Github使用

新建倉庫

  1. 建立專案
    註冊github賬戶,登入後,點選"New respository "

在這裡插入圖片描述

  1. 新頁面中,輸入專案的名稱,勾選’readme.md’,點選’create repository’
    在這裡插入圖片描述

.gitignore檔案內部書寫需要忽略哪些檔案

讓本地能夠獲取Github中倉庫內容

  1. 新增SSH
    點選賬戶頭像後的下拉三角,選擇’settings’, 如果某臺機器需要與github上的倉庫互動,那麼就要把這臺機器的ssh公鑰新增到這個github賬戶上

在這裡插入圖片描述

點選’SSH and GPG keys’,新增ssh公鑰

在這裡插入圖片描述

  1. 在ubuntu的命令列中,回到使用者的主目錄下,編輯檔案.gitconfig,修改某臺機器的git配置。

在這裡插入圖片描述

  1. 使用如下命令生成ssh金鑰。
    ssh-keygen -t rsa -C "郵箱地址"

在這裡插入圖片描述

  1. 進入主目錄下的.ssh檔案件,下面有兩個檔案。

公鑰為id_rsa.pub
私鑰為id_rsa

檢視公鑰內容,複製此內容

在這裡插入圖片描述

  1. 回到瀏覽器中,填寫標題,貼上公鑰

在這裡插入圖片描述

克隆專案

在這裡插入圖片描述

在這裡插入圖片描述

如果克隆時出錯,那麼執行以下操作:

在這裡插入圖片描述

執行克隆:

git clone 地址

上傳分支

推送分支,就是把該分支上的所有本地提交推送到遠端庫,推送時要指定本地分支,這樣,git就會把該分支推送到遠端庫對應的遠端分支上

git push origin 分支名稱
例:
git push origin smart

origin代表github

將本地分支跟蹤伺服器分支

git branch --set-upstream-to=origin/遠端分支名稱 本地分支名稱
例:
git branch --set-upstream-to=origin/smart smart

從遠端分支上拉取程式碼

git pull orgin 分支名稱
例:
git pull orgin smart

使用上述命令會把遠端分支smart上的程式碼下載併合併到本地所在分支。

工作使用git

專案經理:

  1. 專案經理搭建專案的框架。
  2. 搭建完專案框架之後,專案經理把專案框架程式碼放到伺服器。

普通員工:

  1. 在自己的電腦上,生成ssh公鑰,然後把公鑰給專案經理,專案經理把它新增的伺服器上面。
  2. 專案經理會給每個組員的專案程式碼的地址,組員把程式碼下載到自己的電腦上。
  3. 建立本地的分支dev,在dev分支中進行每天的開發。
  4. 每一個員工開發完自己的程式碼之後,都需要將程式碼釋出遠端的dev分支上。

Master:使用者儲存釋出的專案程式碼。V1.0,V2.0
Dev:儲存開發過程中的程式碼。