这些 git 高级命令你知道几个
大家好,我是 dom 哥。今天給大家分享幾個(gè) git 的高級(jí)應(yīng)用。
git 是目前最流行的版本控制工具。git 玩的 6 不 6,輕則影響自己的開發(fā)幸福指數(shù) ??,重則影響下班時(shí)間 ??。本文介紹一些日常開發(fā)中常遇到的場(chǎng)景以及相關(guān)的 git 命令。
接下來就以前端流行的 mvvm 框架 vue 項(xiàng)目為例進(jìn)行演示 ??。
查看 git log 統(tǒng)計(jì)信息 ??
誰才是真正的卷王?這個(gè)命令給你答案!
git shortlog -sn
左側(cè)是 commit 數(shù)量,右側(cè)是提交者 name
自定義 git log 輸出樣式 ??
這是素顏的 git log 樣子。一個(gè) commit 獨(dú)占 7 行,一頁也展示不了幾個(gè) commit 啊~
而且家人們誰懂啊,它這個(gè)日期格式把我看裂開了呀 Tue Dec 26 11:57:50 2023 +0800
先把日期格式調(diào)整的舒服一些:
git config --global log.date format:"%Y-%m-%d %X"
設(shè)置完之后日期格式是這樣紙滴 2023-12-26 11:57:50
再來一串魔法設(shè)置 git log 輸出的信息格式:
git config --global format.pretty "%C(auto)%h %s %C(italic dim white)%cn<%ce>[%cd]%Creset%C(auto)%d%Creset%n"
這是化妝后 git log 的樣子。一行一個(gè) commit,簡直不要太清爽~
偷偷撤銷提交記錄的某次 commit ??
常在河邊走,哪有不濕鞋。誰還沒有提交過一個(gè)不該提交的 commit 呢,還 push 到遠(yuǎn)端了,怎么辦?怎么辦?
git reset ?這會(huì)把某個(gè) commit 之后的提交全干掉啊,不行,不行??
用下面這個(gè)命令,就可以悄無聲息的把某個(gè) commit 摘掉了????
git rebase -i --onto commit-ish^ commit-ish
但事情沒那么簡單。此時(shí)只是本地的提交記錄被糾正了,遠(yuǎn)端的還沒改變呢。你需要 git push!然而在 rebase 之后 git push,一定會(huì)被 reject,會(huì)報(bào)類似下面的錯(cuò)誤信息
千萬別 git pull 哦?。?!因?yàn)榇藭r(shí)當(dāng)前分支的本地和遠(yuǎn)端已經(jīng)產(chǎn)生了分歧,接下來就是決定誰覆蓋誰的時(shí)刻。
如果 git pull,那就是遠(yuǎn)端覆蓋本地,上面的 rebase 操作白干!
如果想本地覆蓋遠(yuǎn)端,只能 git push --force,加上 --force 強(qiáng)推到遠(yuǎn)端!推上去遠(yuǎn)端提交記錄就和本地一樣啦。
但是,實(shí)際操作起來肯定不會(huì)很順利,可能有一長串的 commit 需要確認(rèn),可能會(huì)出現(xiàn)大量的沖突文件,可能需要其他協(xié)作者刪掉本地的分支重新遷出。
刪除遠(yuǎn)程分支 ??
刪除有風(fēng)險(xiǎn),操作需謹(jǐn)慎。千萬別手抖!
git push -d origin <branch>
批量刪除本地分支和遠(yuǎn)端分支
git branch | grep 'dombro_' | xargs git push -d origin
git branch | grep 'dombro_' | xargs git branch -d
當(dāng)前分支名稱 ??
git rev-parse --abbrev-ref HEAD
這通常在 shell 腳本里會(huì)用到!
清理已刪除的本地遠(yuǎn)程引用 ???
git fetch -p
為什么要清理?我也不曉得??
查看一個(gè)文件都哪些人編輯過 ??
git log --pretty=format:"%an" <file> | sort -u
為什么要看這個(gè),就是想看看??
查看某個(gè)文件每一行都是誰寫的 ??
git blame --date=format:"[%Y-%m-%d %X]" <file>
這個(gè)太重要啦,bug來了想把鍋甩出去,得第一時(shí)間找到 TMD 這行代碼誰寫的。
但,正經(jīng)人誰在命令行里看 blame 啊,這里就不得不推薦一個(gè) vscode 插件 GitLens:
有了它,在 vscode 里 blame 簡直不要太方便,再也不用愁找這行代碼到底誰寫的啦
某個(gè)文件沖突太多,想直接用線上的 ??
git pull # 先拉最新的代碼
git checkout origin/master -- <file>
話說你用的 git 沖突解決工具是什么?我先說 ???♂?,webstorm 自帶的 git 工具,比 vscode 的好用多了。
什么!把 .vscode,.idea,.DS_Store 推送上去了!??
git rm --cached -r .vscode/ .idea/ .DS_Store/
別忘了 remove 完之后 commit 哦~
給當(dāng)前項(xiàng)目單獨(dú)設(shè)置 user name 和 email ??
git config user.name <name>
git config user.email <email>
可能我想在 github 上的項(xiàng)目的提交者信息是 DOM哥<dombro@qq.com>,但公司內(nèi)的項(xiàng)目用 姓名<公司@郵箱.com> 會(huì)比較好一點(diǎn)。
git config 設(shè)置完之后信息會(huì)存在項(xiàng)目根目錄 .git/config 中,跟隨項(xiàng)目。實(shí)現(xiàn)不同項(xiàng)目的提交者信息各不相同 ??。
總結(jié)
以上是生活随笔為你收集整理的这些 git 高级命令你知道几个的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 探索高峰:《重返未来1999》登山者栖所
- 下一篇: 少女前线2追放公测兑换码怎么获得?少女前