工作中常用的git命令

vipbic發表於2023-03-02
今天加班,順便寫下Git基礎配置以及常用的命令,親自嘗試

Git配置

瞭解版本控制

什麼是版本控制?我真的需要嗎?版本控制是一種記錄若干檔案內容變化,以便將來查閱特定版本修訂情況的系統。

什麼是分散式版本控制系統分散式版本控制系統( Distributed Version Control System,簡稱 DVCS )。

在這類系統中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客戶端並不只提取最新版本的檔案快照,而是把原始的程式碼倉庫完整地映象下來。這麼一來,任何一處協同工作用的伺服器發生故障,事後都可以用任何一個鏡
像出來的本地倉庫恢復。因為每一次的提取操作,實際上都是一次對程式碼倉庫的完整備份

Git常用命令

git-系統配置
git config -l
git-global配置
git config --global --list
# 可以設全域性公用識別的 郵箱和使用者名稱
git config --global user.name 'xxxxxx'
git config --global user.email 'xxxxx@xxx.com'
專案單獨git配置
# 檢視
git config --list
# 為專案設定單獨的user.name和user.email
git config user.name 'xxxxxx'
git config user.email 'xxxxx@xxx.com'

Git初始化

本地初始化
git init
遠端拉取
git clone 遠端倉庫地址

本地倉庫與遠端倉庫的關聯

# 本地-建立關聯-遠端
git remote add origin 遠端倉庫地址
# 本地-取消關聯-遠端
git remote rm origin

Git儲存和提交

檢視狀態
git status
檢視所有檔案修改詳情
git diff HEAD
檢視指定檔案的修改詳情
git diff HEAD ./README.md
新增儲存
".": 所有修改檔案
git add .
或
git add ./home.vue
新增儲存說明(提交到本地倉庫)
git commit -m '對這次儲存新增說明描述'
拉取程式碼
多人協作開發的時候,提交之前先拉取下程式碼,解決可能未來的衝突
git pull origin 分支名
提交程式碼
git push origin 分支名

Git提交日誌

檢視提交記錄
檢視曾經的提交記錄
可以顯示所有提交過的版本資訊,不包括已經被刪除的 commit 記錄和 reset 的操作
git log --pretty=oneline
控制顯示條數
git log -30 --pretty=oneline
圖形化展示檢視當前分支的版本演變資訊
git log --graph
按作者名字檢視提交記錄
git log --author="John"
搜尋提交歷史,根據關鍵詞
git log -S 關鍵詞
按日期
git log --after="2023-2-1"
搜尋過濾合併提交
git log --no-merges
or
git log --merges
按提交資訊
比如說,你的團隊規範要求在提交資訊中包括相關的issue編號,你可以用下面這個命令來顯示這個 issue 相關的所有提交
git log --grep="JRA-224:"
檢視當前 版本標誌位
git reflog是Git操作的一道安全保障,它能夠記錄幾乎所有本地倉庫的改變,包括所有分支的commit提交,以及已經被刪除的commit
git reflog

Git回退到某個版本

回退到上一個版本
git reset --hard HEAD^ # 回退上一個版本
git reset --hard HEAD~3  # 回退上上上一個版本 
git reset --hard bae128  # 回退到某個版本回退點之前的所有資訊。 

HEAD 說明:

  • HEAD 表示當前版本
  • HEAD^ 上一個版本
  • HEAD^^ 上上一個版本
  • HEAD^^^ 上上上一個版本
  • 以此類推...
可以使用 ~數字表示
  • HEAD~0 表示當前版本
  • HEAD~1 上一個版本
  • HEAD^2 上上一個版本
  • HEAD^3 上上上一個版本
  • 以此類推...

Git分支指令

檢視素有分支
git branch -a
切換分支
git checkout 分支名
建立本地分支
git branch 新分支名
# 建立並切換到新分支
git checkout -b 新分支名
根據指定版本號建立分支
git checkout -b 分支名 提交ID
推送本地分支到遠端倉庫
git push origin 新分支名
刪除本地某個分支
這是一個“安全”操作,因為 Git 會阻止我們刪除具有未合併更改的分支
git branch -d 分支名
強制刪除本地某個分支
即使它有未合併的更改。如果想永久丟棄與特定開發線相關的所有提交,則可以使用此命令
git branch -D 分支名
刪除遠端倉庫的某個分支
git push origin --delelte 分支名
顯示所有遠端倉庫
檢視倉庫源名稱
git remote -v
更新遠端分支列表
git remote update origin(倉庫源名稱) --prune
推送所有分支到遠端倉庫
git push origin(倉庫源名稱) --all 
強行推送當前分支到遠端倉庫,即使有衝突
git push origin(倉庫源名稱) --force

Git合併分支

想將develop分支合併到master分支
git checkout master # 首先切換到master分支上
git pull origin master # 如果是多人開發的話 需要把遠端master上的程式碼pull下來
git merge --no-ff develop # 然後我們把develop分支的程式碼合併到master上
關於 git merge develop 和 git merge --no-ff develop 的區別
git merge develop

==== >  結果就會變成

          A---B---C develop
         /         master
D---E---F 

執行此句話後,因為 develop 就在 master 的下游,所以直接移動了 master 的指標,master 和 develop 都指向了 C

而如果執行了 git merge --no-ff feature 的話,是下面的結果:
git merge --no-ff develop

==== >  結果就會變成

          A---B---C develop
         /         \
D---E---F-----------G master

由於 --no-ff 禁止了快進,所以會生成一個新的提交,master 指向 G。

從合併後的程式碼來看,結果其實是一樣的,區別就在於 --no-ff 會讓 Git 生成一個新的提交物件, 通常我們把 master 作為主分支,上面存放的都是比較穩定的程式碼,而 feature
是用來開發特性的,上面會存在許多零碎的提交,快進式合併會把 feature 的提交歷史混入到 master 中,攪亂 master 的提交歷史

Git標籤

檢視tag列表
git tag -l
本地新增tag
git tag -a 標籤名 -m '版本說明' 
檢視tag資訊
git show 標籤名
本地刪除某個tag
git tag -D 標籤名
or
git tag -d 標籤名
推送本地tag到遠端倉庫
git push origin 標籤名
刪除遠端倉庫tag
git push origin --delete 標籤名 

小記

  • cmd中使用log命令,不會自動退出,需要手動按下英文狀態下的q退出

Git常見錯誤

1、修改最後一次提交訊息 - 提交訊息寫錯了
(按 i 進行編輯,編輯後,按 ESC,如果儲存退出使用 :wq,只退出輸入 :q,如果出錯,退出不儲存使用 :qa!)
git commit --amend #該命令將開啟編輯器,並允許更改最後一次提交訊息
2、Git 撤回 commit,但未 push 的內容
git log
git reset e102c05227bca7517554777f589f130305b69427 #保留提交之前的更改到工作區
3、讓單個檔案回退到指定版本
git log vue.config.js #拿到檔案提交記錄ID
git checkout e102c05227bca7517554777f589f130305b69427(commitID) vue.config.js  #將檔案還原到你想要還原的版本
4、解決衝突
只要所有開發者都遵守這個規則,那麼解決衝突是一件非常容易的事情
  1. 例如我的分支叫做dev分支。我把程式碼修改完成了,現在不知道有沒有衝突。
  2. 在 dev 分支裡面,執行命令git merge origin/master,把遠端的master分支合併到當前dev分支中。如果沒有任何報錯,那麼直接轉到第5步。
  3. 如果有衝突,根據提示,把衝突解決,儲存檔案。然後執行命令git add xxx把你修改的檔案新增到快取區。然後執行命令git commit -m "xxx"新增 commit 資訊。
  4. 執行如下命令,切換到 master 分支:git checkout master。
  5. 執行命令git pull確保當前 master 分支是最新程式碼。
  6. 把dev分支的程式碼合併回 master 分支:git merge dev。
  7. 提交程式碼:git push。

相關文章