你不知道的Git
原文:juejin.cn/post/6931977429732818952
關(guān)注公眾號 前端人,回復“加群”
添加無廣告優(yōu)質(zhì)學習群
前言
相信大家已經(jīng)特別熟練了git的使用,已經(jīng)足夠滿足日常開發(fā)了。如果還有人不會使用git的去看廖雪峰大神的git教程(零基礎(chǔ)教學)滿足日常開發(fā)的同時,我們可能也會遇到奇奇怪怪的問題??,我就把我遇到的問題,以及使用Git的小技巧分享一下??。
git pull 提示錯誤,Your local changes to the following files would be overwritten by merge
場景再現(xiàn):
老李??和老張??同時開發(fā)一個項目,他們兩個開發(fā)的工作有交叉,老李寫代碼非常快,沒下班就火急火燎的寫完了,老張比較慢快到下班的時候才把代碼寫完??。這時當他想更新代碼,老李說我更新代碼了你先pull一下,于是就產(chǎn)生了上面的問題!!!
產(chǎn)生原因:
多人操作場景,其中一人將代碼提交到遠程git,另一個人也修改了文件準備pull的時候會產(chǎn)生該問題;
解決方案一:
保留本地新修改的代碼。暫存本地新修改代碼,并把git服務器上的代碼pull到本地,釋放暫存 之后按照 add commit push 進行代碼更新。
git stash
git pull origin master
git stash pop
解決方案二:
覆蓋本地新修改的代碼,只保留服務端的代碼。直接退回到上一個版本然后把git服務器上的代碼pull到本地
git reset --hard
git pull origin master
.gitignore 無效的解決方法
場景再現(xiàn): .gitignore第一次沒有寫全。比如老李新建了一個項目跟往常一樣正常的提交,隨著項目體積的不斷增加,老李發(fā)現(xiàn)有一個文件的目錄上傳的git根本是沒有必要的,還特別大。于是老李就在.gitignore中加入了響應的目錄規(guī)則,但是并沒有生效!!!
產(chǎn)生原因:
.gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經(jīng)被納入了版本管理中,則修改.gitignore是無效的
解決辦法:
先把本地緩存刪除,然后再提交。
git rm -r --cached .
git add .
git commit -m 'niubi'
git push -u origin master(-u參數(shù)的意義)
不帶任何參數(shù)的git push,默認只推送當前分支
git push -u origin master 上面命令將本地的master分支推送到origin主機,同時指定origin為默認主機,后面就可以不加任何參數(shù)使用git push了。
git push 如果當前分支與多個主機存在追蹤關(guān)系,那么這個時候也可以使用-u選項會指定一個默認主機,如果不加參數(shù)就會推送到默認主機(場景:同一個項目記關(guān)聯(lián)了github也關(guān)聯(lián)了gitee)。
一個項目關(guān)聯(lián)多個遠程Git倉庫
方法一:
使用 git remote add 命令
git remote add github https://github.com/xxx/xxx.git #關(guān)聯(lián)github
git remote add gitee https://gitee.com/xxx/xxx.git # 關(guān)聯(lián)gitee
缺點: 每次push的時候都要push兩次才能推送到響應的遠程。
git push github master
git push gitee master
方法二:
使用 git remote set-url 命令
前提是你已經(jīng)有了一個遠程庫了,再次添加另一個遠程庫。
git remote set-url --add github https://git.oschina.net/zxbetter/test.git
這樣只要執(zhí)行g(shù)it push github master一次就可以推送到兩個遠程庫了。
git push到遠程指定分支
解決方案一
先創(chuàng)建遠程分支
git push <遠程主機名> <本地分支名>:<遠程分支名>
解決方案二
先創(chuàng)建本地分支并切換到該分支,push的時候可以直接指定遠程分支名,遠程分支會自動創(chuàng)建。
git checkout -b [本地分支名]
git add .
git commit -m
git push origin [遠程分支名]
git 給分支添加描述
場景再現(xiàn):
老張?????在開發(fā)項目的過程中經(jīng)常有不同的需求,沒有辦法他只能建立不同的分支來維護自己的項目。穩(wěn)定運行一個月之后,突然有一個地勢的項目要改需求,他已經(jīng)忘記了當時建立的分支是干什么的了如下圖。當時暴怒,提出離職??。

解決辦法一
使用命令給分支添加描述
git config branch.[branch_name].description "分支描述信息" # 設置分支描述
git config branch.{branch_name}.description # 獲取分支描述
這樣的缺點太明顯了每次只能獲取一個分支的描述,命令還特別長。
解決辦法二
使用npm包git-br
$ npm install -g git-br # 全局安裝git-br
$ git config branch.[branch_name].description "分支描述信息" # 設置分支描述
$ git br # 獲取分支描述
Git操作失敗并提示Another git process seems to be running
原因:
Git在使用過程中遭遇了奔潰,部分被上鎖資源沒有被釋放導致的
解決方案:
進入項目文件夾下的 .git文件中(顯示隱藏文件夾或rm .git/index.lock)刪除index.lock文件即可。創(chuàng)建干凈的本地分支并關(guān)聯(lián)遠程分支。
一般在一個分支下創(chuàng)建新的分支時,會把上個分支的內(nèi)容復制到新分支中,如果我們不想要上個分支的內(nèi)容,創(chuàng)建干凈的分支,改怎么辦呢?
解決方案
git checkout -b 本地分支名 origin/遠程分支名
Git提交帶表情??
這種提交我們在github上很常見,他們是怎么把表情加上去的呢
全局安裝 gitmoji-cli
npm i -g gitmoji-cli
安裝完之后只需要在每次提交的時候加上相應的表情編碼就可以了,不同的表情代表著不同的類別,使得代碼提交更加清晰。gitmoji
舉個栗子??


發(fā)現(xiàn)我的提交前面已經(jīng)有小表情了是不是非常明顯??。
Git提交規(guī)范 廢話少說先上圖??

你是不是也一臉懵逼,這是在提交什么。一般來說commit應該一眼就能知道提交的是什么。也為了和一起開發(fā)的同事清楚的知道,你這次提交的內(nèi)容??。網(wǎng)上大部分說的規(guī)范就是Angular 規(guī)范英文好的同學可以去看看,也可以直接參考阮一峰大佬的博客了解了大概規(guī)范之后我們就找響應的工具幫我們弄成規(guī)范的樣子就好啦??。Commitizen(合格Commit message 的工具) 全局安裝
npm install -g commitizen
然后,在項目目錄里,運行下面的命令,使其支持 Angular 的 Commit message 格式。
commitizen init cz-conventional-changelog --save --save-exact
注意:因為commitizen工具是基于Node.js的,所以要保證你的項目下要有package.
之后再提交代碼的時候使用git cz 代替git commit命令就會出現(xiàn)提交類型的選擇,使你提交的代碼更規(guī)范。??
cz-customizable 自定義中文配置 你的選擇類別可能是英文,轉(zhuǎn)換成中文也特別簡單 在項目中運行如下命令
npm install cz-customizable --save-dev
commitizen init cz-customizable --save-dev --save-exact --force
修改package.json 中 config.commitizen 字段為
"config": {
"commitizen": {
"path": "./node_modules/cz-customizable"
}
}
在項目根目錄創(chuàng)建一個 .cz-config.js 的文件這個文件的內(nèi)容我們參照大佬寫好的就行了 關(guān)閉命令窗口再次打開輸入git cz就會發(fā)現(xiàn)已經(jīng)全部變成中文啦 大功告成??。
總結(jié)
這就是我在開發(fā)中遇到過的一些常見問題,以后如果有新的問題,還會持續(xù)更新噠,如果我的文章對你有用,記得三連一下哦
回復 資料包領(lǐng)取我整理的進階資料包回復 加群,加入前端進階群console.log("文章點贊===文章點在看===你我都快樂"Bug離我更遠了,快樂離我更近了
