git零基礎使用指南

語言: CN / TW / HK

一 擁有一個git專案

如果你有一個git雲端專案,使用拉取即可,我們也可以建立一個使用git管理的本地專案。

bash // 拉取雲端的專案到當前資料夾 $ git clone http://git.*******/yourname/test.git

// 為當前資料夾內目錄設定git倉庫管理 git init 本文采用第二種方式建立了一個新的git倉庫。這時候檢視git歷史,是沒有提交記錄的,因為這個倉庫剛剛被建立。

bash $ git log fatal: your current branch 'master' does not have any commits yet

我們在資料夾中新增一個txt檔案並寫入一些內容,後將檔案的變化提交到git。

bash $ git add . $ git commit -m 'feat: init' 1 file changed, 1 insertion(+)

此時我們再去檢視git倉庫的提交記錄,可以看到提交歷史。

bash $ git log Author: kexinran <[email protected]> Date: Thu Aug 11 16:23:58 2022 +0800 feat: init

二 將git專案託管到雲端

在上一節中給出了兩條git專案路線,使用git init本地建立一個新的git專案,或使用git clone從雲端拉取一個已託管到雲端的專案,如果使用後者,則被拉取的專案已與雲端的專案綁定了,我們可以使用git remote檢視本地git專案對應的雲端地址。

bash $ git remote -v origin [email protected]:test/thinkphp.git (fetch) origin [email protected]:test/thinkphp.git (push)

如果使用git init本地建立一個新的git專案,這個專案在雲端是沒有對於的git地址的,使用git remote的結果是空。

bash git remote -v // 什麼也沒有返回

這種情況下怎樣將git專案託管到雲端呢? 首先我們需要建立一個雲端倉庫(如果已有云端倉庫可以跳過該步驟)。很多平臺都支援建立git倉庫,比如碼雲和github,選擇其一,在上面根據提示建立一個倉庫即可,這裡不需要使用命令列,是在網頁裡建立的。 然後將本地git專案與雲端倉庫關聯起來。建立好的雲端倉庫對應一個地址,這裡使用命令列讓我們本地的專案和這個地址關聯即可。

bash $ git remote set-url origin [email protected]:test/thinkphp.git

更改後可以使用git remote檢視到變更後的雲端地址。

bash $ git remote -v origin [email protected]:test/thinkphp.git (fetch) origin [email protected]:test/thinkphp.git (push)

現在我們可以將專案的變化同步到雲端了。 我們首先拉取一下雲端的程式碼,這是為了防止當雲端程式碼發生變化後導致的問題,如果有其他人對雲端程式碼進行了操作,這一步尤其重要,它的作用是將雲端的程式碼變化同步到本地,防止程式碼上傳到雲端時出現程式碼衝突,也就是他人的變化和你的變化在同一個檔案中,稱為程式碼衝突,這種衝突在這一步時可能會被自動合併,也可能需要手動解決。

bash $ git pull // 拉取雲端程式碼得到

然後我們使用git push將自己的程式碼推送到雲端。在推送前一定要使用git add和git commit提交程式碼,否則會導致推送失敗。

bash $ git push

現在,git的基本操作已經講完了,你已經能夠使用git進行基礎程式碼管理了。

三 分支的建立、檢視和刪除

想象這樣一個場景,我們有一個上線的產品需要新增一個新功能,我們每天都需要從本地將程式碼同步到雲端以防止程式碼丟失,這個功能的開發週期是3個月,在開發到一半的時候,我們已經有多次上傳行為了,這時插入功能b的開發,希望三天後上線。我們面對一個問題,現在我們需要上線原功能和功能b的組合,但是原功能程式碼已經被功能a汙染了,所以我們至少要保留一個程式碼版本,這個程式碼版本和當前線上產品版本保持一致。 這裡就需要引入分支來解決。 分支是為了將修改記錄的整體流程分叉儲存。 分叉後的分支不受其他分支的影響。 我們使用操作來認識分支。 首先我們使用git branch檢視分支。

bash $ git branch * master

這裡返回master代表當前程式碼倉庫有一個叫做master的分支,master前面的*代表當前分支是master分支。 我們可以使用git branch開啟新分支。

bash git branch text

然後我們再次檢視分支。

bash $ git branch * master text

可以看到當前專案多了一個叫做text的分支,這個分支是以當前分支為模板複製出來的。 我們給當前目錄新增一個圖片檔案,然後使用git add,git commit提交。

bash $ git add . $ git commit -m 'feat: init2'

我們可以使用git log檢視提交記錄,可以看到我們已經提交了兩次。

bash $ git log // 展示兩條提交記錄

這時候我們通過git checkout切換到另一個分支。並檢視提交記錄。

bash $ git checkout text Switched to branch 'text' $ git branch master * text $ git log // 展示一條提交記錄

可以看到,星號出現在text前面,表示當前是text分支,git log表示目前該分支只有一次提交記錄,因為text分支是在master提交一次後建立的,後續在master上的提交與text分支無關。 現在我們有了自己的分支,但是在這時使用git push提交到雲端會失敗,因為雲端是沒有這個新分支的,我們需要在雲端建立新分支並推送。

bash git push origin 新分支名字

當分支被廢棄的時候可以刪除。 因為無法刪除當前分支,所以刪除分支前要先切換到其他分支。 刪除本地分支:

bash $ git branch -d 分支名字

刪除遠端分支:

bash $ git push origin --delete 分支名字

如果遇到git branch -d 分支名字刪除失敗,可能是因為該分支未合併到主分支,如果直接刪除會造成程式碼損失,確定刪除可以使用強制刪除命令git branch -D 分支名字刪除。

bash $ git checkout master Switched to branch 'master' $ git branch * master text $ git branch -d text Deleted branch text (was e8a9d13).

四 git必備套路

4.1 已經push的commit如何修改message

首先我們使用git log檢視一下歷史記錄。

bash $ git log // 展示兩條提交記錄 feat: init 和 feat: init2

1 修改歷史提交記錄要使用rebase命令,如果你僅修改最近一次的提交資訊,僅執行第二步即可。

bash $ git rebase -i HEAD~2 // 上述命令為展示最近2條提交記錄等待修改,注意此時提交記錄要大於2次,否則異常 pick f141a06 feat: init1 pick f141a05 feat: init2 ...

rebase命令提交後出現大屏文字,我們只要注意上面的幾行即可。 上面的幾行分為3列, 左邊第一列表示命令(command),中間一列表示commit id,最右邊一列是我們之前提交的message。 這時我們可以看到一個閃爍的游標,點選i後,可以將游標移動到對於記錄的第一列位置,將pick更改為edit。 後先按Esc鍵退出當前模式,按大寫兩次Z進行儲存退出。 儲存完了之後,git的分支就會發生改變,從原來的master改成了我們第一個edit的commit id,使用git branch後可以看到分支已經改變到一個新的rebasing master。 2 我們可以在這裡對提交記錄進行改變。

bash $ git commit --amend

這時會刷出一屏文字,文字最上方是該次提交的massage,修改即可。 修改過程還是按i進入修改模式,移動游標到對應位置修改內容,點選esc推出編輯模式,使用ZZ儲存後退出。 這次記錄修改完成啦. 3 我們輸入命令$ git rebase --continue, 現在分支號又發生了改變,表示我們要對第二個標記為edit的commit進行修改。 接著再重複上面的操作, 全部修改完成後,輸入命令$ git rebase --continue, 會提示Successfully rebased and updated refs/heads/master.。 這時輸入git log查詢歷史記錄,massage已經修改了。 修改massage後,在推送到遠端伺服器時,要使用git push -f推送, 否則我們edit的commit會新增到commit後面, 而不是更新原commit。

4.2 怎樣將連續多個commit整理成一個

開發中我們會不斷commit程式碼,比如我們剛剛提交完程式碼,ui過來說,這個字號不對,我們只好開啟程式碼修改字號,後又提交了一次,這種情況導致我們一天可能多次提交程式碼,比較亂。 然而實際上我們每天只要在工作結束後提交一次即可,這種情況下,我們就需要將連續多個commit整理成一個。 我們使用git log看到,當前我們有3次提交記錄。 我們還是進入剛剛的rebase修改頁面。

bash $ git rebase -i HEAD~2

// 上述命令為展示最近2條提交記錄等待修改,注意此時提交記錄要大於2次,否則異常

bash pick f141a06 feat: init1 pick f141a05 feat: init22 ...

下面我們將init1和init22整理成一個提交記錄。 點選 i 進入編輯模式,將feat: init22記錄前面的pick修改為s,點選esc退出編輯模式,輸入ZZ儲存並退出。 這時彈出新的頁面,我們點選i進入編輯模式,在this is the 1st commit message下一空白行輸入註釋內容, 點選esc退出編輯模式,輸入ZZ儲存並退出。 這時使用git log檢視記錄,發現commit已經被合併了。

--未完待續--

「其他文章」