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:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節
對比檔案差異
- 對比工作區和某版本中的檔案差異
git diff HEAD -- code.txt # 對比HEAD版本和工作區檔案的差異
- 對比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合併過程:
-
一開始的時候,master分支是一條線,git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點
每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長。
-
當我們建立新的分支,例如dev時,git新建了一個指標叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上
git建立一個分支很快,因為除了增加一個dev指標,改變HEAD的指向,工作區的檔案都沒有任何變化
- 從現在開始,對工作區的修改和提交就是針對dev分支了,比如新提交一次後,dev指標往前移動一步,而master指標不變
-
我們在dev上的工作完成了,就可以把dev合併到master上。git怎麼合併呢?最簡單的方法,就是直接把master指向dev的當前提交,就完成了合併——Fast Forward
並完分支後,甚至可以刪除dev分支。刪除dev分支就是把dev指標給刪掉,刪掉後,我們就剩下了一條master分支
b. 解決合併衝突
兩個分支對共同的檔案都存在提交,這樣合併就會有衝突。
步驟:
- 首次合併,git會報錯,告訴你哪個檔案有衝突,需要解決
- 開啟那個檔案,裡面會標記衝突的文字,然後自行修改
- 修改好衝突後,再次進行提交
- 然後再次合併,就解決了
- 刪除原分支
分支管理策略
- Git會盡可能使用FastForward模式
- 如果有衝突,則會讓使用者自己解決
- 如果沒有衝突,但是不能執行FastForward,則會進行一次新的提交
比如 主分支修改了某個檔案並且做了提交;dev分支建立了一個新檔案並且做了提交,那麼他們之間沒有衝突,但是需要合併。
git merge -m "資訊" <name>
禁用FastForward模式
如果要強制禁用fast forward模式,git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支資訊
git merge --no-ff -m "資訊" <name>
修復Bug分支
此時在某分支進行工作的時候,需要修復別的分支上的Bug,那麼過程是:
- 儲存當前分支的工作現場——
git stash
- 切換到需要修復Bug的分支
- 建立新的分支來修復Bug
- 修復完畢後使用非FF模式來合併分支——
git merge --no-ff -m "" <name>
- 刪除Bug修復的分支
- 切換回之前的工作分支
- 還原工作現場 ——
git stash pop
3. Github使用
新建倉庫
- 建立專案
註冊github賬戶,登入後,點選"New respository "
- 新頁面中,輸入專案的名稱,勾選’readme.md’,點選’create repository’
.gitignore檔案內部書寫需要忽略哪些檔案
讓本地能夠獲取Github中倉庫內容
- 新增SSH
點選賬戶頭像後的下拉三角,選擇’settings’, 如果某臺機器需要與github上的倉庫互動,那麼就要把這臺機器的ssh公鑰新增到這個github賬戶上
點選’SSH and GPG keys’,新增ssh公鑰
- 在ubuntu的命令列中,回到使用者的主目錄下,編輯檔案.gitconfig,修改某臺機器的git配置。
- 使用如下命令生成ssh金鑰。
ssh-keygen -t rsa -C "郵箱地址"
- 進入主目錄下的.ssh檔案件,下面有兩個檔案。
公鑰為id_rsa.pub
私鑰為id_rsa
檢視公鑰內容,複製此內容
- 回到瀏覽器中,填寫標題,貼上公鑰
克隆專案
如果克隆時出錯,那麼執行以下操作:
執行克隆:
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
專案經理:
- 專案經理搭建專案的框架。
- 搭建完專案框架之後,專案經理把專案框架程式碼放到伺服器。
普通員工:
- 在自己的電腦上,生成ssh公鑰,然後把公鑰給專案經理,專案經理把它新增的伺服器上面。
- 專案經理會給每個組員的專案程式碼的地址,組員把程式碼下載到自己的電腦上。
- 建立本地的分支dev,在dev分支中進行每天的開發。
- 每一個員工開發完自己的程式碼之後,都需要將程式碼釋出遠端的dev分支上。
Master:使用者儲存釋出的專案程式碼。V1.0,V2.0
Dev:儲存開發過程中的程式碼。