上一篇介紹了git的環境安裝配置,本篇對git在工做中經常使用的用法進行總結,已知足大部分的平常工做需求,對於其餘的一些git命令用法在從此使用到時我也會更新上來,文中若有錯誤,歡迎你們指出來,謝謝~php
1、git本地基礎用法
一、建立代碼倉庫 git inithtml
二、加入全部目錄到倉庫 git add .vue
三、提交 git commit -m "first commit" 簡寫 git cinode
四、查看git提交狀態 git status 簡寫 git stgit
五、藉助diff查看具體修改的地方 git diff 修改的文件路徑 -號表示刪除的部分 +表示添加的部分github
六、撤銷未提交的文件 git checkout 文件路徑 簡寫 git co 若是文件已經add,checkout沒法撤銷,先取消添加 git reset HEAD 文件路徑,而後再checkout就okapi
七、查看記錄 git log 記錄太多,若是想只查看一條,經過id來查看 git log 記錄id -1 -p (-1表示只查看一條,-p表示查看具體修改了什麼內容)緩存
八、分支操做app
更新分支fetch
git fetch -p
查看分支
git branch -a 查看所有分支 git branch 查看本地分支
新建分支
git branch new_branch。新建本地分支 git checkout new_branch. 切換分支 git push origin new_branch。推送到遠程倉庫
刪除分支
git push origin --delete branch。 刪除遠程分支 git branch -d branch。 刪除本地分支 git branch -D branch。 強行刪除本地分支(若是分支代碼有修改,會提示須要合併分支)
合併分支 例如將遠程master分支合併到當前mis_pro_content分支
git fetch --all git merge origin/master git push origin mis_pro_content
九、添加忽略文件 有些文件或目錄是不須要提交到git中咱們能夠將其添加到.gitgnore文件中,這樣在提交的時候不會提交,好比node_modules依賴文件
根目錄下新建.gitgnore文件,將node_modules/添加到文件中
2、遠程git用法(團隊合做)
一、遠程下載代碼到本地 git clone https://github.com/example/test.git
二、修改提交代碼後需同步到遠程版本庫上 git push origin master (origin指定遠程git版本庫的地址)
master部分指定的是同步到哪一個分支上
三、同步遠程修改的內容到本地 ,2種方式能夠操做(fetch和pull)
--fetch方式同步
將遠程的同步到本地 git fetch origin/master(同步下來的內容會放在分分支origin/master上) 查看遠程版本庫修改哪些了內容 git diff origin/master 合併分分支origin/master到主分支上 git merge origin/master
--pull方式(將遠程代碼同步而且合併到本地,至關於將fetch和merge一塊兒執行)
git pull origin master
3、git版本撤銷回滾
使用場景
- 糟了,我剛把不想要的代碼,commit到本地倉庫中了,可是尚未作push操做!
- 完全完了,剛線上更新的代碼出現問題了,須要還原此次提交的代碼!
- 剛纔我發現以前的某次提交太愚蠢了,如今想要幹掉它!
撤銷
針對場景1,在未進行git push前的全部操做,都是在「本地倉庫」中執行的。咱們暫且將「本地倉庫」的代碼還原操做叫作「撤銷」!
- 狀況一,文件被修改了,但未執行git add操做
git checkout fileName git checkout .
- 狀況二,文件執行了git add操做,但想撤銷對其的修改
git reset HEAD fileName 取消暫存 git checkout fileName 撤銷修改
- 狀況三 ,已在本地進行了屢次git commit操做,如今想撤銷到其中某次Commit
git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]
例如:
git reset --hard HEAD^。 回退到上一次版本 git reset --hard 3628164。 回退到指定的某個版本
狀況四,將test分支合併到了當前分支,可是想撤銷上一次的合併
git merge --abort
回滾
針對場景2,已進行git push,即已推送到「遠程倉庫」中。咱們將已被提交到「遠程倉庫」的代碼還原操做叫作「回滾」
- 狀況一,刪除最後一次遠程提交
方式1:使用revert
git revert HEAD git push origin master
方式2:使用reset
git reset --hard HEAD^ git push origin master -f
兩者區別: revert是放棄指定提交的修改,可是會生成一次新的提交,須要填寫提交註釋,之前的歷史記錄都在; reset是指將HEAD指針指到指定提交,歷史記錄中不會出現放棄的提交記錄。
- 狀況二,回滾某次提交
# 找到要回滾的commitID git log git revert commitID
4、 本地修改暫存
git stash 本地修改暫存 git stash pop 還本來地修改 git stash list 查看暫存信息
git stash 可用來暫存當前正在進行的工做, 好比想pull 最新代碼, 又不想加新commit, 或者另一種狀況,爲了fix 一個緊急的bug, 先stash, 使返回到本身上一個commit, 改完bug以後再stash pop, 繼續原來的工做
git stash pop 從新應用緩存的stash
當你屢次使用’git stash’命令後,你的棧裏將充滿了未提交的代碼,這時候你會對將哪一個版本應用回來有些困惑,
’git stash list’ 命令能夠將當前的Git棧信息打印出來,你只須要將找到對應的版本號,例如使用’git stash apply stash@{1}’就能夠將你指定版本號爲stash@{1}的工做取出來,當你將全部的棧都應用回來的時候,可使用’git stash clear’來將棧清空。
5、上傳本地項目到遠程倉庫
- 狀況一,不是一個git倉庫
git init git add README.md git commit -m "first commit" git remote add origin git@github.com:fozero/vue-nuxt-ssr.git 關聯遠程倉庫,需先在遠程倉庫建立一個同名倉庫 git push -u origin master
- 狀況二,已是一個本地git倉庫
git remote add origin git@github.com:fozero/vue-nuxt-ssr.git 關聯遠程倉庫 git push -u origin master
注: 若新建遠程倉庫的時候自動建立了README文件,則在此以前先pull下來,git pull --rebase origin master,避免在push時報錯
6、問題解決
一、分支合併時報錯
https://stackoverflow.com/questions/2314437/resolve-conflict-delete-modify-in-git git merge origin/feature-wuj-uinfo CONFLICT (modify/delete): application/views/preorderg3/newshare.html deleted in HEAD and modified in origin/feature-wuj-uinfo. Version origin/feature-wuj-uinfo of application/views/preorderg3/newshare.html left in tree. CONFLICT (modify/delete): application/views/preorderg3/newpic.html deleted in HEAD and modified in origin/feature-wuj-uinfo. Version origin/feature-wuj-uinfo of application/views/preorderg3/newpic.html left in tree. Auto-merging application/controllers/api/Reserve.php Automatic merge failed; fix conflicts and then commit the result.
以上錯誤大體是說那個文件已經被刪除了,我這邊還存在,經過rm將衝突文件刪除解決該問題
git rm application/views/preorderg3/newshare.html git rm application/views/preorderg3/newpic.html
7、最後
有時候能夠看到別人提交的時候會顯示emoj表情 ,其實咱們在提交的時候也可使用,對於不一樣的提交類型 ,使用不一樣的emoj表情,這樣看起來更加的一目瞭然
在commit時,經過在emoj前面加‘:’,如:
git ci -m ':bug: fix click of get with no feedback'
更多的emoj表情能夠查看
- https://github.com/carloscuesta/gitmoji/
- https://gitmoji.carloscuesta.me/
- https://zhuanlan.zhihu.com/p/29764863
更多的git命令用法能夠查看