配置命令
配置用戶名和郵箱
git config --global user.name "JohnieXu" // 配置全局用戶名為JohnieXu
git config --global user.email "281910378@qq.com" // 配置全局郵箱為281910378@qq.com
查看配置
git config -l // 查看git全局配置信息
or
git config --list
常用命令
初始化項目
git init
克隆項目
git clone
git clone https://github.com/JohnieXu/eleme-web-vue.git
or
git clone git@git.github.com:JohnieXu/eleme-web-vue.git
查看項目信息
- 綜合信息
git status // 查看當前項目的所有綜合信息
- commit提交信息
git log --graph --pretty=oneline --abbrev-commit // 以圖形的形式顯示commit的提交記錄
推送更新
git add .
=> git commit
=> git push
git add . // 添加所有修改修改過的文件,僅添加**當前目錄下**的所有修改過的文件,主要運行g(shù)it命令的路徑
git commit -m 'fix a bug' // 將修改提交到(本地項目的)暫存區(qū), 提交的描述內(nèi)容為"fix a bug"
git push -u origin master // 推送當前分支下已提交的更新到origin倉庫的master分支下,同時設(shè)置當前提交的origin和master為默認設(shè)置
管理修改
- 已修改文件未添加到暫存區(qū)
git checkout -- . // 撤銷當前所有文件做的修改
-- file
: file為需要撤銷修改的文件路徑
- 已修改文件并已添加到暫存區(qū)
// 撤銷全部文件
git reset HEAD // 撤回暫存區(qū)的所有文件到工作區(qū)(沒有撤銷對文件的修改)
git checkout -- . // 撤銷所有文件的修改
// 撤銷指定文件
git reset HEAD readme.txt // 將暫存區(qū)的readme.txt文件撤回工作區(qū)
git checkout -- readme.txt // 撤銷readme.txt文件的修改
- 已提交commit未push到遠程倉庫
git reflog // 查看最近的commit列表
git reset --hard commit_id // 退回到commit_id對應(yīng)的commit版本
commit_id:
需要退回的版本的commit的ID(hash值)
分支管理
- 查看分支
git branch // 查看所有分支, *對應(yīng)當前分支
git remote -v // 查看關(guān)聯(lián)的遠程分支詳情
- 創(chuàng)建分支
git branch dev // 創(chuàng)建dev分支
- 切換分支
git checkout dev // 切換到dev分支
or
git checkout -b dev // 創(chuàng)建并切換到dev分支
- 拉取特定分支
git checkout -b dev origin/dev // 創(chuàng)建并且換到dev分支臣疑,同時將origin上的dev分之同步pull到本地dev分支
本地分支和origin上的分之關(guān)聯(lián)不要求分之名稱一致盯仪,推送分之時候注意推送的本地分之名稱和origin上的分之名稱
- 合并分支
git checkout master // 切換到master分支
git merge dev // 將dev分支合并到master分支
or
git merge --no-ff -m "merge with no-ff" dev // 非fast-forward模式合并dev分支到master分支
--no-ff
: 合并方式為禁用Fast-forward
, 即合并的時候會另外提交一個commit記錄
-m
: 本次合并commit的描述內(nèi)容
- 推送分支
git push origin master // 將master分支推送到遠程的origin關(guān)聯(lián)的倉庫上
or
git push -u origin master // 將master分支推送到遠程的origin關(guān)聯(lián)的倉庫上, 設(shè)置默認推送master至origin
-u
: 第一次推送時候加上-u
的話, 將第一次的推送源和分支保存為默認設(shè)置, 下次git push
就相當于git push origin master
- 刪除分支
git branch -d dev // 刪除dev分支(dev已經(jīng)被合并)
git branch -D dev // 強制刪除dev分支(dev分支未被合并)
- Bug分支
應(yīng)用場景: 當前正在自己的分支-dev-xu上進行新功能開發(fā), master分支發(fā)現(xiàn)Bug需要立即修復(fù)趴腋。
git stash // 將當前的工作區(qū)儲存起來, git status查看工作區(qū)是干凈的
git checkout master // 切換到master分支
git checkout -b bug-101 // 從master分支創(chuàng)建新的對應(yīng)的bug-101分支
git add . && git commit -m 'fix bug 101' // 修復(fù)bug并提交修改
git checkout master && git merge --no-ff -m 'merged bug fix 101' bug-101 // 將bug-101分支的修改合并到主分支
git branch -d bug-101 // 刪除bug-101分支
git stash pop // 恢復(fù)之前工作區(qū)以便繼續(xù)新功能的開發(fā), 同時刪除stash記錄(git stash list看不到stash的任何內(nèi)容) <==> git stash apply && git stash drop
- 分支策略
master分支
: 最穩(wěn)定的分支俏让,僅用來發(fā)布新版本茵臭,平時對代碼做的修改不能直接網(wǎng)上push
dev分支
: 是不穩(wěn)定的, 一般在新版本發(fā)布的時候把dev分支合并到master上市怎,在master分支發(fā)布新版本
個人分支
: 每個人都有自己的分支鸯檬,提交代碼的時候往dev分支上合并
標簽管理
- 創(chuàng)建標簽
適應(yīng)場景: 對當前最新的提交commit打標簽
git checkout master // 切換到需要打標簽的分支
git tag v1.0 // 打一個名為v1.0的標簽
git tag // 查看已打標簽列表
適應(yīng)場景: 對當歷史提交的commit打標簽
git log --pretty=oneline --abbrev-commit // 以簡潔的形式列出所有commit記錄
git tag v0.9 commit_id // 對commit_id對應(yīng)的這次commit打一個名為v0.9的標簽
git tag // 查看標簽記錄
帶有說明的標簽
$ git tag -a v0.1 -m "version 0.1 released" commit_id // 創(chuàng)建帶有說明的標簽
- 查看標簽
git show v0.9 // 查看v0.9這一個標簽的詳情
-a
: 指定標簽名
-m
: 指定說明文字
- 推送標簽
git push origin v1.0 // 推送v1.0這一個標簽到origin關(guān)聯(lián)的遠程倉庫
git push origin --tags // 一次性推送所有標簽到origin關(guān)聯(lián)的遠程倉庫
- 刪除標簽
適用場景: 要刪除的標簽僅創(chuàng)建在本地未推送到遠程倉庫
git tag -d v0.9 // 刪除v0.9這一個標簽(僅本地刪除該標簽)
適用場景: 要刪除的標簽已經(jīng)推送到遠程倉庫, 并且也要刪除遠程倉庫上相應(yīng)的標簽
git tag -d v0.9 // 本地刪除v0.9這一個標簽
git push origin :refs/tags/v0.9 // 刪除origin關(guān)聯(lián)的遠程倉庫的v0.9這一標簽(刪除也用push), 這是github刪除遠程倉庫標簽, coding等其他的遠程倉庫未測試
進階命令
多個遠程倉庫管理
適用場景: 當前本地的git項目是clone自https://github.com/JohnieXu/eleme-web-vue.git
, 同時這個項目又需要同步關(guān)聯(lián)coding上的另一個遠程倉庫https://git.coding.net/JohnieXu/eleme-web-vue.git
, 要求每次push
代碼同步push
到兩個遠程倉庫伶选。
git remote add origin https://github.com/JohnieXu/eleme-web-vue.git
git remote add coding https://git.coding.net/JohnieXu/eleme-web-vue.git
git remote add all https://github.com/JohnieXu/eleme-web-vue.git // 將all關(guān)聯(lián)到github上的遠程倉庫
git remote set-url --add --push all https://github.com/JohnieXu/eleme-web-vue.git // 在all上追加push對應(yīng)的遠程倉庫地址為github的地址
git remote set-url --add --push all https://git.coding.net/JohnieXu/eleme-web-vue.git // 在all上追加push對應(yīng)的遠程倉庫地址為github的地址
git add . && git commit -m 'init' && git push -u all master // all分支同時關(guān)聯(lián)了origin和coding兩個遠程倉庫, 推送all即可同步push代碼到兩個遠程倉庫