git常用操作
git rebase
git checkout bat
git rebase origin #把"bat"分支里的每個提交(commit)取消掉,并且把它們臨時 #保存為補丁(patch)(這些補丁放到".git/rebase"目錄中),然后把"bat"分支更新
#為最新的"origin"分支承匣,最后把保存的這些補丁應(yīng)用到"mywork"分支上
git rebase和git merge的區(qū)別
merge相當于將雙方的修改綜合
rebase相當于將對方修改之后,在提交自己的修改,結(jié)果一樣
git clone 取回遠程的所有分支
git clone git@github.com:dolymood/angular-example.git #獲取某個遠程庫
git fetch <遠程主機名> <分支名> #獲取全部的分支 如果需要特定分支 可指定分支名
git branch -a #查看所有分支 git branch -a 查看所有分支
git checkout -b newBrach <遠程分支> #創(chuàng)建并且切換到新的分支
返回某個文件的某個版本
git log 文件名 #查看某個文件的歷史記錄 可以加參數(shù)-p查看diff 獲取commit id
git reset commitid 文件名 #返回該文件的當前的版本雳灾,會在緩存區(qū)
git checkout 文件名 #返回之前的版本
#可以用git reflog 查看所有的版本信息
#git log --pretty=oneline filename 通過一行查看單個文件的提交情況
#git show commitid 查看該提交id的修改情況
#git log --stat 很好用,只看每次提交的增減
跳轉(zhuǎn)到某個版本
git reflog #查看所有版本信息
git reset --hard commitid #重置到某個特定的版本
刪除文件
git rm filename 直接刪除文件
git rm --cached filename 刪除文件暫存狀態(tài)
創(chuàng)建分支
git branch develop // 只創(chuàng)建分支
git checkout -b master develop // 創(chuàng)建并切換到 develop 分支
設(shè)置 commit 的用戶和郵箱
git config user.name "xx"
git config user.email "xx@xx.com"
git config --global color.ui true #git 顯示顏色
Git設(shè)置
Git的全局設(shè)置在~/.gitconfig中傀蚌,單獨設(shè)置在project/.git/config下蹦漠。
忽略設(shè)置全局在~/.gitignore_global中戚嗅,單獨設(shè)置在project/.gitignore下。
//設(shè)置提交的時候是否轉(zhuǎn)換換行符號
git config [--global] core.autocrlf = [true|false|input]
true : 將crlf轉(zhuǎn)換為lf衍菱,而在檢出時將crlf轉(zhuǎn)換為lf.
false : 不轉(zhuǎn)換.
input : 提交時將crlf轉(zhuǎn)換成lf赶么,檢出時不轉(zhuǎn)換.
git clean 指令
git clean -f #刪除未跟蹤的文件
參數(shù)n:查看刪除哪些文件
參數(shù)x:將gitignore的文件刪除,一般不用
參數(shù)d:刪除未跟蹤的目錄
gitignore生效
#中途加進.gitignore的文件或文件夾不會生效
git rm -r --cached .#之前已經(jīng)在版本管理中了,需要刪除本地緩存脊串,在提交
git add .
git commit -m"add"
git add submodule
git submodule add git@github.com:zlxbuzz/gulp.git ./gulp
##刪除模塊
1 .gitmodules的模塊信息
2 git rm –cached gulp
git 更新submodule
#可以寫一個submoduleupdate.sh 的腳本
git submodule init
git submodule update
git submodule foreach --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; git checkout $branch'
git submodule foreach --recursive "git submodule update"
echo "Pulling all git submodules..."
git submodule foreach --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; git pull origin $branch'
git blame 查看每行提交
git blame [選項] [版本選項] [版本] [--] 文件
--incremental 增量式地顯示發(fā)現(xiàn)的 blame 條目
-b 邊界提交顯示空的 SHA-1(默認:關(guān)閉)
--root 不把根提交作為邊界(默認:關(guān)閉)
--show-stats 顯示命令消耗統(tǒng)計
--score-debug 顯示判斷 blame 條目位移的得分診斷信息
-f, --show-name 顯示原始文件名(默認:自動)
-n, --show-number 顯示原始的行號(默認:關(guān)閉)
-p, --porcelain 顯示為一個適合機器讀取的格式
--line-porcelain 為每一行顯示機器適用的提交信息
-c 使用和 git-annotate 相同的輸出模式(默認:關(guān)閉)
-t 顯示原始時間戳(默認:關(guān)閉)
-l 顯示長的SHA1提交號(默認:關(guān)閉)
-s 隱藏作者名字和時間戳(默認:關(guān)閉)
-e, --show-email 顯示作者的郵箱而不是名字(默認:關(guān)閉)
-w 忽略空白差異
--minimal 花費額外的循環(huán)來找到更好的匹配
-S <文件> 使用來自 <file> 的修訂集而不是調(diào)用 git-rev-list
--contents <文件> 使用 <file> 的內(nèi)容作為最終的圖片
-C[<得分>] 找到文件內(nèi)及跨文件的行拷貝
-M[<得分>] 找到文件內(nèi)及跨文件的行移動
-L <n,m> 只處理行范圍在 n 和 m 之間的辫呻,從 1 開始
--abbrev[=<n>] 用 <n> 位數(shù)字顯示 SHA-1 哈希值
git add
用法:git add [選項] [--] <路徑規(guī)則>...
-n, --dry-run 演習
-v, --verbose 冗長輸出
-i, --interactive 交互式揀選
-p, --patch 交互式挑選數(shù)據(jù)塊
-e, --edit 編輯當前差異并應(yīng)用
-f, --force 允許添加忽略的文件
-u, --update 更新已跟蹤的文件
-N, --intent-to-add 只記錄,該路徑稍后再添加
-A, --all 添加所有改變的已跟蹤文件和未跟蹤文件
--ignore-removal 忽略工作區(qū)中移除的路徑(和 --no-all 相同)
--refresh 不添加琼锋,只刷新索引
--ignore-errors 跳過因出錯不能添加的文件
--ignore-missing 檢查在演習模式下文件(即使不存在)是否被忽略
git add . #新文件+修改的文件
git add -u #修改的文件或刪除的文件
git add -A # 所有新文件和修改的文件放闺,刪除的文件
git push
git push origin --delete dev #刪除遠程分支
git flow
分支使用
master
與線上版本保持同步,代碼和功能質(zhì)量滿足實際發(fā)布環(huán)境需要
不直接接收任何代碼commit缕坎。
接收來自release怖侦、hotfix分支的merge。
版本的tag也在此分支進行定義
develop
接收來自其他功能谜叹、特性開發(fā)分支(feature)的merge匾寝。
feature
具體功能、特性的工作分支族荷腊,大部分的commit在此類分支上完成艳悔。
完成開發(fā)后,分支merge到develop分支停局,具體feature分支刪除很钓。
release
用于版本發(fā)布的分支香府,在確定版本計劃后從develop分支建立董栽。
用于版本的測試、問題修復工作企孩,接收bug修復的commit锭碳。
完成測試和開發(fā)后,分支merge到develop和master分支勿璃。
hotfix
用于在master分支發(fā)現(xiàn)實際環(huán)境中問題進行修復擒抛,接收修復commit。
完成后merge回master分支并且merge到develop分支补疑。
master分支需要進行修復版本tag的定義歧沪。
git 對比兩個tag,并且排除某些目錄
git diff 1.1.1.179...1.1.1.182 -- . ':!dist' ':!lib'