當(dāng)前位置:
首頁 >
git使用手册
發(fā)布時(shí)間:2023/11/27
34
豆豆
git使用手冊
由 趙慶鵬創(chuàng)建, 最后修改于十二月 14, 2018
一、文件比較
1. 新建兩個(gè)文件hello/world,內(nèi)容可自定義,兩個(gè)文件的內(nèi)容,需要不相同,進(jìn)行文件比對。2. 使用diff -u hello world > diff.txt,進(jìn)行文件比對,查看效果。3. 使用cp hello world對文件進(jìn)行覆蓋,并使用patch world < diff.txt對world文件進(jìn)行恢復(fù)。4. 使用cp world hello對文件進(jìn)行覆蓋,并使用patch -R hello < diff.txt對hello文件進(jìn)行恢復(fù)。
二、字符集設(shè)置
1. 亂碼:git config --global core.quotepath false2. 設(shè)置字符集:git config --global i18n.logOutputEncoding gbk(log輸出)/ git config --global i18n.commitEncoding gbk
三、初始化全局參數(shù)
1. 設(shè)置全局用戶參數(shù):git config --global user.name "yourname"2. 設(shè)置全局用戶郵箱參數(shù):git config --global user.email "youremail"3. 設(shè)置全局用戶gitreview參數(shù):git config --global gitreview.username "yourname"4. 設(shè)置命令別名:git config --system alias.st status/alias.ci commit/alias.co checkout/alias.br branch5. 設(shè)置顏色顯示:git config --global color.ui true6. 創(chuàng)建一個(gè)目錄并初始化git:mkdir demo && git init7. 編輯.git/config文件:git config -e8. 編輯.gitconfig文件:git config -e --global9. 編輯系統(tǒng)配置:git config -e --system10. 刪除用戶配置信息:git config --unset --global11. 設(shè)置全局忽略文件/設(shè)置本地忽略文件 git config --global core.excludesfile / git config core.excludesfile
四、操作指令
1. git status 顯示工作路徑下已修改的文件,-s 精簡輸出,-b 顯示當(dāng)前工作分支2. git diff <commit1> <commit2> -- <path> 顯示與上次提交版本文件的不同,HEAD 將工作區(qū)和HEAD相對比差異,--cached/–staged 提交暫存區(qū)和版本庫中文件的差異 <path1><path2> 非git目錄/文件差異比較3. git add & git add -p <file> 把當(dāng)前所有修改添加到下次提交中/把對某個(gè)文件的修改添加到下次提交中 git add -u 將本地有改動(dòng)(包括修改和刪除)的文件標(biāo)記到暫存區(qū) git add -i 交互式添加文件 git add -f <filename> 強(qiáng)制指定文件名4. git grep <contect> & git grep <contect> <tag> 從當(dāng)前目錄的所有文件中查找文本內(nèi)容/從當(dāng)前目錄的所有文件中查找某一個(gè)版本的文本5. git rev-parse --git-dir 顯示版本庫.git目錄位置6. git rev-parse --show-toplevel 顯示工作區(qū)根目錄7. git rev-parse --show-prefix 相對于工作區(qū)根目錄的相對目錄8. git rev-parse --show-cdup 顯示從當(dāng)前目錄(cd)后退(up)到工作區(qū)的根的深度9. git commit --allow-empty -m "yourmessage" 允許空白提交10. git log --pretty=fuller/raw --graph <id> / --oneline 顯示全部commit log信息/顯示每個(gè)提交對象的parent屬性 / 顯示跟蹤鏈 / 對父提交的關(guān)聯(lián)實(shí)現(xiàn)對提交歷史的追溯11. git commit --amend --reset-author 對提交進(jìn)行修補(bǔ),以改正前面提交中錯(cuò)誤的信息/將author的ID同步進(jìn)行修改12. git log --stat / --decorate / -p / -m 顯示每次提交的文件變更統(tǒng)計(jì) / 顯示該提交關(guān)聯(lián)的引用 / 顯示日志的同時(shí)顯示改動(dòng) / 顯示從哪個(gè)提交修改的13. git reset HEAD,緩存區(qū)目錄樹重寫,將被master分支指向的目錄樹替換,工作區(qū)不受影響14. git rm --cached <file> 從緩存區(qū)刪除文件,工作區(qū)不做改變15. git checkout . / git checkout -- <file> / git checkout HEAD . / git checkout HEAD <file> 前兩者使用暫存區(qū)全部的文件或指定的文件替換工作區(qū)的文件,后兩者使用HEAD指向的master分支中的全部或部分文件替換暫存區(qū)和工作區(qū)文件16. git clean -fd 清除當(dāng)前工作區(qū)中沒有加入版本庫的文件和目錄(非跟蹤文件和目錄) -nd 查詢哪些文件會(huì)被刪除,防止誤刪除17. git ls-tree / ls-files --with-tree 查看暫存區(qū)目錄樹文件大小/查看暫存區(qū)目錄樹存放位置,并指定樹的位置18. git write-tree 將暫存區(qū)的目錄樹寫入git對象庫19. git write-tree | xargs git ls-tree -l -r -t 遞歸操作顯示目錄樹的內(nèi)容20. git stash 保存當(dāng)前工作進(jìn)度,暫存區(qū)/工作區(qū)狀態(tài)保存 list 查看保存的進(jìn)度 pop [--index] [<stash>] 恢復(fù)最新保存的進(jìn)度,提供<stash>參數(shù),則從該<stash>中恢復(fù),回復(fù)后,則刪除該<stash> --index 除恢復(fù)工作區(qū)文件外,還可嘗試恢復(fù)暫存區(qū) [save [--patch] [-k | --[no-] keep-index] [-q] | --quiet] [<message>] eg: git stash save "message..." --patch 顯示工作區(qū)和HEAD的差異,通過編輯差異文件,決定最終保存工作區(qū)的內(nèi)容,并排除無關(guān)內(nèi)容 -k 或 --keep-index參數(shù),保存后不會(huì)重置暫存區(qū) apply [--index] [<stash>] 與pop類似,但不刪除恢復(fù)的進(jìn)度 drop [<stash>] 刪除進(jìn)度,默認(rèn)刪除最新進(jìn)度 clear 刪除所有進(jìn)度 branch <branchname> <stash> 基于進(jìn)度創(chuàng)建分支21. git cat-file -t <id>/ -p <id> 查看id的類型 / 查看id的詳情 git show <tag> --stat 查看和分析某個(gè)提交22. git branch 顯示當(dāng)前工作分支 -v 顯示詳情 23. git reset 重置,將HEAD游標(biāo)指向任意一個(gè)存在的提交ID --hard 破壞工作區(qū)未提交的改動(dòng) --soft 只修改引用的指向,不改變暫存區(qū)和工作區(qū) --mixed 更改引用的指向及重置暫存區(qū),不改變工作區(qū)24. git reflog show master / expire --expire=<date> -all 查看master分支修改的記錄,用于reset后的恢復(fù) / 強(qiáng)制讓<date>之前的記錄全部過期25. git merge [-s <strategy>] [-X <strategy-option>] <commit> ... 合并,將其他分支的提交和當(dāng)前分支的提交進(jìn)行合并 -s 設(shè)定合并策略 -X 設(shè)置合并策略提供附件的參數(shù) / --no-commit 合并后,放入暫存區(qū),檢查后,合并到共享倉庫 / 合并策略有:① resolve 只能合并兩個(gè)頭,三向合并策略,最安全、最快的策略 ② recursive 只能合并兩個(gè)頭,三向合并策略,默認(rèn)合并策略 a. ours 沖突時(shí),選擇本地當(dāng)前分支版本,忽略其他版本,若不沖突,則合并他人改動(dòng) b. theirs 丟棄自己的版本,選擇他們的版本 c. subtree[=path] 子樹合并策略 ③ octopus 兩個(gè)以上的合并頭指針,拒絕執(zhí)行手動(dòng)解決合并 ④ ours 合并任意數(shù)量的頭指針,合并結(jié)果總是使用當(dāng)前分支,忽略他人分支 ⑤ subtree 合并A、B,若B、A中一個(gè)子樹相同,B先匹配A的樹結(jié)構(gòu)26. git checkout [-q] [<commit>] [–] <paths> / git checkout [<branch>] / git checkout [-m] {[-b | --orphan] <new_branch>} [<start_point>] commit為可選項(xiàng),覆蓋工作區(qū),不會(huì)該表HEAD頭指針 / 改變HEAD頭指針,若不使用branch參數(shù),則對工作區(qū)進(jìn)行檢查 / 創(chuàng)建和切換新的分支,新的分支以<start_point>指定的提交開始創(chuàng)建27. git describe 將最新提交顯示為一個(gè)易記的名稱,選取離該提交最近的里程碑作為“基礎(chǔ)版本號(hào)” --dirty 顯示tag版本號(hào)中文件已被修改標(biāo)記 --always 顯示精簡提交ID28. git mv <old_filename> <new_filename> 修改文件名29. git archive -o <zipfile> HEAD <dir> / --format=tar --prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz 歸檔壓縮 -o 指定壓縮文件名 HEAD 指定分支 --format 指定壓縮格式 --prefix 指定tag30. gitk -all 顯示所有分支 --since="2 weeks ago" 兩周內(nèi)的所有提交 <tag> <dir>/<file> 某個(gè)tag以來,針對dir/file的提交31. git rev-parse --symbolic --branches 顯示分支信息 --tags 顯示里程碑信息 --glob=<branch> 顯示定義的所有引用32. git rev-parse --oneline <branch1> <branch2> ... 顯示分支的所有歷史提交 33. git blame <filename> 文件追溯 -L n,m 查看從第n行開始,往后m行的數(shù)據(jù)34. git bisect 二分查找 good/bad 好提交/壞提交 存放位置refs/bisect/good--/bad / reset 結(jié)束正在進(jìn)行的出錯(cuò)的二分查找 / replay logfile 通過日志文件恢復(fù)進(jìn)度,重啟二分查找 / run sh <script> 運(yùn)行自動(dòng)化測試腳本35. git cherry-pick <branch> 揀選操作,將其他分支連接到checkout分支,注意,在cherry-pick時(shí),本地未提交的內(nèi)容,均需要進(jìn)行提交,否則,會(huì)觸發(fā)cherry-pick的正在進(jìn)行操作,即amend,操作完成后,需要--continue參數(shù)繼續(xù)。36. git rebase --onto <newbase> <since> <till> 將指定范圍內(nèi)的提交,嫁接到另外一個(gè)提交之上 --onto 提交1 提交2 本地提交 / <newbase> 里程碑編號(hào) 將提交嫁接到里程碑上 / -i <since>...<till> 交互式操作,將多個(gè)提交悉數(shù)放在一個(gè)文件中進(jìn)行提交37. git commit-tree 從目錄樹創(chuàng)建提交38. git revert 反轉(zhuǎn)提交39. git clone 版本庫克隆 <repository> <directory> 將前者指向的版本庫創(chuàng)建一個(gè)克隆到后者目錄中 / --bare <repository> <directory.git> 不包含工作區(qū)的克隆,不對上游版本庫進(jìn)行注冊 / --mirror <repository> <directory.git> 不包含工作區(qū)的克隆,對上游版本庫進(jìn)行注冊,并可使用git fetch和上游版本庫持續(xù)同步40. git pull/push 提交/拉回 [<remote-repos> [<refspec>]] 前者參數(shù)可省略,是遠(yuǎn)程版本庫的地址或名稱,后者為引用 / git push -f 強(qiáng)制推送 / git pull == git fetch + git merge41. git pack-refs -all / --all--prune 打包所有refs文件,到packed-refs中,默認(rèn)90天前記錄清理 / 未關(guān)閉gc.packrefs,可實(shí)現(xiàn)對引用的打包42. git show-index < <index路徑> 43. git fsck / git prune 查看版本庫中包含的沒有被任何引用關(guān)聯(lián)的松散對象 --no-reflogs 找到看不到未被關(guān)聯(lián)到的對象 / 清理未被引用的松散對象44. git gc / --prune=<date> 對分散在 .git/refs下的文件打包到.git/packed-refs中 / 對指定日期之前的未被關(guān)聯(lián)的松散對象進(jìn)行清理,將時(shí)間參數(shù)傳遞給 git prune --expire <date>,默認(rèn)清楚2周以前未被關(guān)聯(lián)的對象45. git repack 對有引用關(guān)聯(lián)的對象進(jìn)行打包,未被引用關(guān)聯(lián)的對象不做操作46. git tag 顯示當(dāng)前版本庫的tag列表 -n<num> 顯示<num>行說明 -a <tagname> [<commit>] / -m <msg> <tagname> [<commit>] 創(chuàng)建帶說明的里程碑 -s <tagname> [<commit>] / -u <key-id> <tagname> [<commit>] 創(chuàng)建帶GunPG簽名的里程碑 -u參數(shù)指定私鑰進(jìn)行簽名 -d 刪除里程碑 <tag><commit-id> 恢復(fù)誤刪除的里程碑 -f / --force 強(qiáng)制覆蓋已有的里程碑47. git name-rev 顯示提交ID及其對應(yīng)的一個(gè)引用,默認(rèn)優(yōu)先使用分支名,若提交上沒有相對應(yīng)的引用,則會(huì)使用最新提交上的引用名稱并加上向后回溯的符號(hào)~<num> --tags 優(yōu)先使用里程碑48. git ls-remote 查看上游版本庫的引用49.
總結(jié)
- 上一篇: 王者荣耀怎么设置拒绝加好友?
- 下一篇: 轻量级git服务器 Gogs git 服