工作效率翻倍:Git實(shí)用命令集錦
1、了解版本控制
什么是分布式版本控制系統(tǒng)分布式版本控制系統(tǒng)( Distributed Version Control System,簡(jiǎn)稱 DVCS )。
在這類系統(tǒng)中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客戶端并不只提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來。這么一來,任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,事后都可以用任何一個(gè)鏡 像出來的本地倉庫恢復(fù)。因?yàn)槊恳淮蔚奶崛〔僮鳎瑢?shí)際上都是一次對(duì)代碼倉庫的完整備份
2、Git常用命令
git-系統(tǒng)配置
git config -lgit-global配置
git config --global --list
# 可以設(shè)全局公用識(shí)別的 郵箱和用戶名
git config --global user.name 'xxxxxx'
git config --global user.email 'xxxxx@xxx.com'項(xiàng)目單獨(dú)git配置
# 查看
git config --list
# 為項(xiàng)目設(shè)置單獨(dú)的user.name和user.email
git config user.name 'xxxxxx'
git config user.email 'xxxxx@xxx.com'Git初始化
本地初始化
git init遠(yuǎn)程拉取
git clone 遠(yuǎn)程倉庫地址本地倉庫與遠(yuǎn)程倉庫的關(guān)聯(lián)
# 本地-建立關(guān)聯(lián)-遠(yuǎn)程
git remote add origin 遠(yuǎn)程倉庫地址
# 本地-取消關(guān)聯(lián)-遠(yuǎn)程
git remote rm originGit保存和提交
查看狀態(tài)
git status查看所有文件修改詳情
git diff HEAD查看指定文件的修改詳情
git diff HEAD ./README.md添加保存
".": 所有修改文件
git add .
或
git add ./home.vue添加保存說明(提交到本地倉庫)
git commit -m '對(duì)這次保存添加說明描述'拉取代碼
多人協(xié)作開發(fā)的時(shí)候,提交之前先拉取下代碼,解決可能未來的沖突
git pull origin 分支名提交代碼
git push origin 分支名Git提交日志
查看提交記錄
查看曾經(jīng)的提交記錄 可以顯示所有提交過的版本信息,不包括已經(jīng)被刪除的 commit 記錄和 reset 的操作
git log --pretty=oneline控制顯示條數(shù)
git log -30 --pretty=oneline圖形化展示查看當(dāng)前分支的版本演變信息
git log --graph按作者名字查看提交記錄
git log --author="John"搜索提交歷史,根據(jù)關(guān)鍵詞
git log -S 關(guān)鍵詞按日期
git log --after="2023-2-1"搜索過濾合并提交
git log --no-merges
or
git log --merges按提交信息
比如說,你的團(tuán)隊(duì)規(guī)范要求在提交信息中包括相關(guān)的issue編號(hào),你可以用下面這個(gè)命令來顯示這個(gè) issue 相關(guān)的所有提交
git log --grep="JRA-224:"查看當(dāng)前 版本標(biāo)志位
git reflog是Git操作的一道安全保障,它能夠記錄幾乎所有本地倉庫的改變,包括所有分支的commit提交,以及已經(jīng)被刪除的commit
git reflogGit回退到某個(gè)版本
回退到上一個(gè)版本
git reset --hard HEAD^ # 回退上一個(gè)版本
git reset --hard HEAD~3 # 回退上上上一個(gè)版本
git reset --hard bae128 # 回退到某個(gè)版本回退點(diǎn)之前的所有信息。HEAD 說明:
- HEAD 表示當(dāng)前版本
- HEAD^ 上一個(gè)版本
- HEAD^^ 上上一個(gè)版本
- HEAD^^^ 上上上一個(gè)版本
- 以此類推...
可以使用 ~數(shù)字表示
- HEAD~0 表示當(dāng)前版本
- HEAD~1 上一個(gè)版本
- HEAD^2 上上一個(gè)版本
- HEAD^3 上上上一個(gè)版本
- 以此類推...
Git分支指令
查看素有分支
git branch -a切換分支
git checkout 分支名創(chuàng)建本地分支
git branch 新分支名
# 創(chuàng)建并切換到新分支
git checkout -b 新分支名根據(jù)指定版本號(hào)創(chuàng)建分支
git checkout -b 分支名 提交ID推送本地分支到遠(yuǎn)程倉庫
git push origin 新分支名刪除本地某個(gè)分支
這是一個(gè)“安全”操作,因?yàn)?Git 會(huì)阻止我們刪除具有未合并更改的分支
git branch -d 分支名強(qiáng)制刪除本地某個(gè)分支
即使它有未合并的更改。如果想永久丟棄與特定開發(fā)線相關(guān)的所有提交,則可以使用此命令
git branch -D 分支名刪除遠(yuǎn)程倉庫的某個(gè)分支
git push origin --delelte 分支名顯示所有遠(yuǎn)程倉庫
查看倉庫源名稱
git remote -v更新遠(yuǎn)程分支列表
git remote update origin(倉庫源名稱) --prune推送所有分支到遠(yuǎn)程倉庫
git push origin(倉庫源名稱) --all強(qiáng)行推送當(dāng)前分支到遠(yuǎn)程倉庫,即使有沖突
git push origin(倉庫源名稱) --forceGit合并分支
想將develop分支合并到master分支
git checkout master # 首先切換到master分支上
git pull origin master # 如果是多人開發(fā)的話 需要把遠(yuǎn)程master上的代碼pull下來
git merge --no-ff develop # 然后我們把develop分支的代碼合并到master上關(guān)于 git merge develop 和 git merge --no-ff develop 的區(qū)別
git merge develop
==== > 結(jié)果就會(huì)變成
A---B---C develop
/ master
D---E---F執(zhí)行此句話后,因?yàn)?develop 就在 master 的下游,所以直接移動(dòng)了 master 的指針,master 和 develop 都指向了 C
而如果執(zhí)行了 git merge --no-ff feature 的話,是下面的結(jié)果:
git merge --no-ff develop
==== > 結(jié)果就會(huì)變成
A---B---C develop
/ \
D---E---F-----------G master
由于 --no-ff 禁止了快進(jìn),所以會(huì)生成一個(gè)新的提交,master 指向 G。從合并后的代碼來看,結(jié)果其實(shí)是一樣的,區(qū)別就在于 --no-ff 會(huì)讓 Git 生成一個(gè)新的提交對(duì)象, 通常我們把 master 作為主分支,上面存放的都是比較穩(wěn)定的代碼,而 feature 是用來開發(fā)特性的,上面會(huì)存在許多零碎的提交,快進(jìn)式合并會(huì)把 feature 的提交歷史混入到 master 中,攪亂 master 的提交歷史
Git標(biāo)簽
查看tag列表
git tag -l本地添加tag
git tag -a 標(biāo)簽名 -m '版本說明'查看tag信息
git show 標(biāo)簽名本地刪除某個(gè)tag
git tag -D 標(biāo)簽名
or
git tag -d 標(biāo)簽名推送本地tag到遠(yuǎn)程倉庫
git push origin 標(biāo)簽名刪除遠(yuǎn)程倉庫tag
git push origin --delete 標(biāo)簽名小記
- cmd中使用log命令,不會(huì)自動(dòng)退出,需要手動(dòng)按下英文狀態(tài)下的q退出
Git常見錯(cuò)誤
1、修改最后一次提交消息 - 提交消息寫錯(cuò)了
(按 i 進(jìn)行編輯,編輯后,按 ESC,如果保存退出使用 :wq,只退出輸入 :q,如果出錯(cuò),退出不保存使用 :qa!)
git commit --amend #該命令將打開編輯器,并允許更改最后一次提交消息2、Git 撤回 commit,但未 push 的內(nèi)容
git log
git reset e102c05227bca7517554777f589f130305b69427 #保留提交之前的更改到工作區(qū)3、讓單個(gè)文件回退到指定版本
git log vue.config.js #拿到文件提交記錄ID
git checkout e102c05227bca7517554777f589f130305b69427(commitID) vue.config.js #將文件還原到你想要還原的版本4、解決沖突
只要所有開發(fā)者都遵守這個(gè)規(guī)則,那么解決沖突是一件非常容易的事情
- 例如我的分支叫做dev分支。我把代碼修改完成了,現(xiàn)在不知道有沒有沖突。
- 在 dev 分支里面,執(zhí)行命令git merge origin/master,把遠(yuǎn)程的master分支合并到當(dāng)前dev分支中。如果沒有任何報(bào)錯(cuò),那么直接轉(zhuǎn)到第5步。
- 如果有沖突,根據(jù)提示,把沖突解決,保存文件。然后執(zhí)行命令git add xxx把你修改的文件添加到緩存區(qū)。然后執(zhí)行命令git commit -m "xxx"添加 commit 信息。
- 執(zhí)行如下命令,切換到 master 分支:git checkout master。
- 執(zhí)行命令git pull確保當(dāng)前 master 分支是最新代碼。
- 把dev分支的代碼合并回 master 分支:git merge dev。
- 提交代碼:git push。



























