作為一名開發人員,不管走到哪裡可能都會和程式碼倉庫發生不可描述的關係,從clone倉庫 => 新的功能分支 => 開發功能完成後提交 => 分支合併 => 打上標籤 => 部署到線上環境,這一系列操作都離不開這個程式碼版本管理工具Git,所以常見命令爛熟於心有助於我們提升效率。
克隆git倉庫
gitlab或者github有有兩種克隆方式,ssh協議和http協議。使用http只要輸入使用者名稱和密碼即可,使用ssh是要部署自己的公鑰到gitlab或者github上,在登入使用者的設定裡邊配置。查詢自己的公鑰,一般在自己電腦的以下目錄:
➜ ~ cd .ssh
➜ .ssh ls
id_rsa id_rsa.pub known_hosts
公鑰就是id_rsa.pub這個檔案中的內容,部署好之後就可以去克隆倉庫了。
分支操作
git checkout -b
好的,聽說你已經把名為Blog的倉庫克隆到本地,現在Leader安排你做一個評論的功能,那麼從終端進入專案一般是這個樣子:
➜ Blog git:(main)
假如生產環境部署的是main分支或者叫master,那麼新的功能應該從這個主分支檢出。
➜ Blog git:(main) git checkout -b comment
Switched to a new branch 'comment'
* comment
ele
main
git status / git add / git commit
到這裡就可以在這個分支上做你的功能了。當你寫到興起的時候,突然Leader告訴你線上有個問題急需要修復。你看似穩如老狗,實則慌得一匹。不過無論如何用腳都能想到要先儲存你做了一半的評論功能。於是你使用了以下命令:
➜ Blog git:(comment) ✗ git status
On branch comment
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
// 看到了熟悉的內容改動,表示放心,使用下面的命令把它們納入到版本管理
➜ Blog git:(comment) ✗ git add .
➜ Blog git:(comment) ✗ git commit -m "comment progress 50%"
[comment 006a55d] comment progress 50%
1 file changed, 1 insertion(+), 1 deletion(-)
git log / git reset
這樣做固然可以,但是產生了一次提交記錄,其實還可以把你的修改先暫存起來,現在我們把這次提交重置掉,要進行重置我們需要知道上一個版本號:
➜ Blog git:(comment) git log --oneline
006a55d (HEAD -> comment) comment progress 50%
2bf17f8 (origin/main, origin/HEAD, main) loading
56131ba 優化樣式
cc91d8c abstract
a81dbe7 sitemap
b915f65 baidu
可以看到我們只要重置2bf17f8這一次就好了,但是注意需要保留辛苦寫的 程式碼(bug)。於是機智的使用了下面命令:
➜ Blog git:(comment) git reset --mixed 2bf17f8
Unstaged changes after reset:
M README.md
➜ Blog git:(comment) ✗ git status
On branch comment
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
愉快的回到了未提交之前的狀態。如果你使用git reset --hard 2bf17f8,那麼就要恭喜了,之前的改動就全部丟失了,所以一定要慎重。
git stash
為了減少一次無用的提交,我們使用git stash來暫存未完成的評論功能:
➜ Blog git:(comment) ✗ git stash
Saved working directory and index state WIP on comment: 2bf17f8 loading
// 可以看到是以上次提交的資訊記錄本次stash的內容
接下來就可以處理Leader安排的緊急任務了,從主分支切出hot_fix分支
➜ Blog git:(main) git checkout -b hot_fix
Switched to a new branch 'hot_fix'
問題修復後儲存提交:
➜ Blog git:(hot_fix) ✗ git add .
➜ Blog git:(hot_fix) ✗ git commit -m "bug fixed"
git merge
切換分支到main合併hot_fix
➜ Blog git:(hot_fix) git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
➜ Blog git:(main) git merge hot_fix
Updating 2bf17f8..b85e853
Fast-forward
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
到這裡,就可以從main分支釋出新的版本到線上了,並且修復了線上的緊急問題。這時你的本地出現了沒有用的分支hot_fix:
➜ Blog git:(main) git branch
comment
ele
hot_fix
* main
現在可以把它刪除掉了,使用命令:
➜ Blog git:(main) git branch -d hot_fix
Deleted branch hot_fix (was b85e853).
假如之前你還把它推送到了遠端,檢視所有遠端分支:
➜ Blog git:(main) git branch -r
origin/HEAD -> origin/main
origin/ele
origin/hot_fix
origin/main
(END)
那現在遠端的分支也沒有任何用途了,使用下面命令刪除遠端分支:
➜ Blog git:(main) git push origin -d hot_fix
To github.com:iicoom/Blog.git
- [deleted] hot_fix
現在又重新回到清爽的狀態,可以重新回到comment分支完成之前的功能:
➜ Blog git:(main) git checkout comment
Switched to branch 'comment'
// 把之前暫存的內容恢復
➜ Blog git:(comment) git stash pop
On branch comment
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (0553a4fa89f44ea5708a21d5c421c7b1115c40cb)
又可以happy的coding了。本文通過一個場景,重現了在實際工作中一些git命令的使用,希望對你有幫助。