Add & Commit
git init
初始化一個 Git 倉庫(repository)瞧壮,即把當(dāng)前所在目錄變成 Git 可以管理的倉庫。
git add 文件
把文件添加到 暫存區(qū)(stage)匙握,可被 track 追蹤紀(jì)錄下來咆槽。可多次使用來添加多個文件。
**git add **
添加所有修改到暫存區(qū)圈纺,效果同 git add all秦忿,待驗證。
git add -A
暫存所有的文件赠堵,包括新增加的小渊、修改的和刪除的文件。
git add .
暫存新增加的和修改的文件茫叭,不包括已刪除的文件酬屉。即當(dāng)前目錄下所有文件。
git add -u
暫存修改的和刪除的文件揍愁,不包括新增加的文件呐萨。
git add -i
交互式添加文件到暫存區(qū)。
git add -p
暫存文件的一部分莽囤。
git commit -m "本次提交說明"
一次性把暫存區(qū)所有文件修改提交到倉庫的當(dāng)前分支谬擦。注意:提交信息可為中文也可為英文,若為英文則通常用一般現(xiàn)在時朽缎。如果不加參數(shù) -m 則會跳轉(zhuǎn)到編輯器強(qiáng)制填寫提交說明信息惨远。
git commit -am "本次提交說明"
使用該命令,Git 就會自動把所有已經(jīng)跟蹤過的文件暫存起來一并提交话肖,從而跳過 git add 步驟北秽,參數(shù) -am 也可寫成-a -m。**“在 oh-my-zsh 下最筒,直接用 gcam “message” 就搞定了” —魔都三帥語贺氓。
git commit --amend
重新提交,最終只會有一個提交床蜘,第二次提交將 **代替 **第一次提交的結(jié)果辙培。尤其適用于提交完了才發(fā)現(xiàn)漏掉了幾個文件沒有添加蔑水,或者提交信息寫錯了的情況。
git commit --amend --reset-author
在上一次 commit 之后想重新更新一下時間扬蕊。amend 實際上修改了上一個 commit搀别。所以如果已經(jīng) push 了上一個 commit,請盡量不要 amend厨相。如果一定要 amend 已經(jīng) push 了的 commit领曼,請確保這個 commit 所在的 branch 只有你一個人使用(否則會給其他人帶來災(zāi)難),然后在 amend 之后使用 git push –force蛮穿。只要多加小心庶骄,該命令貌似沒什么卵用。
git commit -p
commit 文件的一部分践磅,適合工作量比較大的情況单刁。之后,Git 會對每塊修改彈出一個提示府适,詢問你是否 stage羔飞,按 y/n 來選擇是否 commit 這塊修改,? 可以查看其他操作的說明檐春。
Diff & Show
git status
顯示當(dāng)前倉庫的最新狀態(tài)逻淌。提交之后,工作區(qū)就是“干凈的”疟暖,即沒有新的修改卡儒;有未提交文件時,最上面顯示的是在 staging area俐巴,即將被 commit 的文件讲坎;中間顯示沒有 stage 的修改了的文件境蔼,最下面是新的還沒有被 Git track 的文件。“在 oh-my-zsh 下诀诊,輸入 gst 就出來了弥激,誰用誰知道藐握,裝逼利器穿香,效率杠杠的”—魔都三帥語野崇。
git status -s 或 git status --short
狀態(tài)簡覽。輸入此命令后糟把,有如下幾種情況(總共5種情況):新添加的未跟蹤文件前面有 ?? 標(biāo)記赎线,新添加到暫你可能注意到了 M 有兩個可以出現(xiàn)的位置,出現(xiàn)在右邊的 M 表示該文件被修改了但是還沒放入暫存區(qū)糊饱,出現(xiàn)在靠左邊的 M 表示該文件被修改了并放入了暫存區(qū)。
git diff
查看 工作區(qū)中的修改颠黎。
git diff --staged 或 git diff --cached
查看 暫存區(qū)中的修改另锋。
git diff <commit id1> <commit id2>
比較兩次 commit 之間的差異滞项。
git diff <branch1> <branch2>
在兩個 branch 之間比較。
git diff 文件
查看指定文件具體修改了哪些內(nèi)容夭坪。
git diff HEAD -- 文件
查看版本庫最新版本和工作區(qū)之間的區(qū)別文判,貌似沒什么卵用。
git difftool --tool-help
查看系統(tǒng)支持哪些 Git Diff 插件室梅,貌似沒什么卵用戏仓。
git show
查看最后一個 commit 的修改。
git show HEAD~3
查看倒數(shù)第四個 commit 的修改亡鼠,HEAD~3 就是向前數(shù)三個的 commit赏殃,即倒數(shù)第四個 commit。
git show deadbeef
查看 hash 為 deadbeef 的 commit 的修改间涵。
git blame 文件
查看誰什么時間改了哪些文件仁热。
log & reset
git log
顯示從最近到最遠(yuǎn)的提交日志,包括每個提交的 SHA-1 校驗和勾哩、作者的名字和電子郵件地址抗蠢、提交時間以及提交說明等基本信息。
git log -p -2
除顯示基本信息之外思劳,還顯示每次提交的內(nèi)容差異迅矛,-2 意思是僅顯示最近兩次提交。特別適用于進(jìn)行代碼審查潜叛,或者快速瀏覽某個搭檔提交的 commit 所帶來的變化秽褒。
git log --start
顯示每次提交的簡略的統(tǒng)計信息,貌似不太好用钠导。
git log --graph
查看分支合并圖震嫉。
git log --pretty=oneline
簡化日志信息,將每個提交放在一行顯示牡属,查看的提交數(shù)很大時非常有用票堵,也可帶有** –graph** 參數(shù),效果同 git config format.pretty oneline逮栅。
git log --graph --pretty=oneline --abbrev-commit
查看分支的合并情況悴势,包括分支合并圖、一行顯示措伐、提交校驗碼縮略顯示特纤。
git log --oneline --decorate
查看各個分支當(dāng)前所指的提交對象(commit object)。Git 倉庫中有五個對象:三個 blob 對象(保存著文件快照)侥加、一個樹對象(記錄著目錄結(jié)構(gòu)和 blob 對象索引)以及一個提交對象(包含著指向前述樹對象的指針和所有提交信息)捧存。
git log --oneline --decorate --graph --all
查看分叉歷史,包括:提交歷史、各個分支的指向以及項目的分支分叉情況昔穴。
git reset --hard HEAD^
回退到上一個版本镰官。同理,回退到上上個版本為:HEAD^ ^吗货, 回退到上100個版本為:HEAD-100泳唠,貌似波浪號 ~ 也可以,變成倒數(shù)第101個宙搬。
git reflog
紀(jì)錄每一次命令笨腥,可用于查找某一提交版本的 commit id。
git reset --hard <commit id>
回退到某一提交過的版本勇垛,如果已經(jīng) push脖母,則回退的意義不大了】悖恢復(fù)一個徹底刪掉的 commit镶奉,見鏈接:
https://github.com/xhacker/GitProTips/blob/master/zh_CN.md#別人-push-了修改我無法-push-了怎么辦
working area & repo area
工作區(qū)(Working Directory)
項目所在的文件目錄。
版本庫(Repository)
工作區(qū)有一個隱藏目錄文件** .git**(可通過命令 ls -ah 查看隱藏文件)崭放,這就是 Git 的版本庫哨苛。版本庫里主要有稱為 **stage **的暫存區(qū)、Git 自動創(chuàng)建的 **master **分支币砂,以及指向 master 的一個指針 HEAD建峭,表示版本庫的最新版本。
reset & revert
git checkout -- 文件
丟棄工作區(qū)的修改决摧,包括 **修改后還沒有放到暫存區(qū) 和 添加到暫存區(qū)后又作了修改 兩種情況亿蒸。總之掌桩,讓該文件回到最近一次 git commit 或 git add 之后的狀態(tài)边锁。注意:沒有 – ,就變成了切換分支的命令了波岛。郭神的書 P195 沒有 – 符號茅坛,可能是筆誤。
git reset HEAD 文件
把 暫存區(qū) 的修改撤銷(unstage)则拷,回退到工作區(qū)贡蓖。注意:在 Git 中任何已提交的東西幾乎總是可以恢復(fù)的。甚至那些被刪除的分支中的提交或使用 –amend 選項覆蓋的提交也可以恢復(fù)煌茬。然而斥铺,任何未提交的東西丟失后很可能再也找不到了。
git reset --hard
重置所有文件到未修改的狀態(tài)坛善。
git reset <commit SHA>
重置到某個 commit晾蜘。
git reset HEAD~1
將當(dāng)前 branch 重置為倒數(shù)第二個 commit(即丟棄最后一個 commit)邻眷。git reset 有三個參數(shù)可以選擇,–soft笙纤、–mixed 和 –hard耗溜。
git reset --soft
修改最后一個 commit。貌似沒什么卵用省容。
git revert <commit id>
還原某個 commit。還原(revert)的實質(zhì)是產(chǎn)生一個新的 commit燎字,內(nèi)容和要還原的 commit 完全相反腥椒。比如,A commit 在 main.c 中增加了三行候衍,revert A 產(chǎn)生的 commit 就會刪除這三行笼蛛。如果我們非常確定之前的某個 commit 產(chǎn)生了 bug,最好的辦法就是 revert 它蛉鹿。git revert 后 git 會提示寫一些 commit message滨砍,此處最好簡單描述為什么要還原;而重置(reset)會修改歷史妖异,常用于還沒有 push 的本地 commits惋戏。
git revert HEAD
還原到上次 commit。
remove
git rm 文件
把文件從版本庫中刪除他膳,不會再追蹤到响逢。
git rm -f 文件
強(qiáng)制刪除版本庫中有修改的文件。
git rm --cached 文件
把文件從版本庫中刪除棕孙,但讓文件 保留在工作區(qū)且不被 Git 繼續(xù)追蹤(track)舔亭,通常適用于在 rm 之后把文件添加到 .gitignore 中的情況。
git rm log/*.log
刪除 log/ 目錄下擴(kuò)展名為 .log 的所有文件蟀俊。
git rm *~
刪除以 ~ 結(jié)尾的所有文件钦铺。
Remote repo
remote & push
git remote
查看已經(jīng)配置的遠(yuǎn)程倉庫服務(wù)器,效果同 git remote show肢预。
git remote -v
顯示需要讀寫遠(yuǎn)程倉庫使用的 Git 保存的簡寫與其對應(yīng)的 URL矛洞。
git ls-remote <remote-name>
顯示獲得遠(yuǎn)程引用的完整列表。
git remote show <remote-name>
參數(shù) remote-name 通常都是縮寫名 origin误甚,可以得到遠(yuǎn)程分支更為詳細(xì)的信息以及 pull 和 push 相關(guān)提示信息缚甩。
git remote add <shortname> <url>
添加并關(guān)聯(lián)一個遠(yuǎn)程庫。其中窑邦,shortname 一般是 origin擅威,也可以是其他字符串,用來代替整個 url冈钦。
git push
推送本地修改到 origin郊丛。
git push -u origin master
關(guān)聯(lián)后,使用該命令第一次推送 master 分支的所有內(nèi)容,后續(xù)再推送的時候就可以省略后面三個參數(shù)了厉熟,其中參數(shù) u 代表上游(upstream)的意思导盅。
git push origin 遠(yuǎn)程分支(通常是 master)
推送最新修改。注意:多人協(xié)作時揍瑟,除了 merge 可能會發(fā)生沖突之外白翻,推送時也有可能發(fā)生沖突。在他人推送之后是不能立即推送自己的修改的绢片,想想也是滤馍,因為可能會覆蓋他人的工作,所以必須先拉鹊籽(pull)別人的修改合并(merge)之后才能推送巢株。如果不是第一次推送,后面的參數(shù)可省略熙涤。
git push <remote-name> <commit SHA>:<remote-branch_name>
push 一部分 commit阁苞。例如:git push origin 9790eff:master 即為 push 9790eff 之前的所有 commit 到 master。
git remote rename old_name new_name
重命名一個遠(yuǎn)程倉庫的簡寫名祠挫。
git remote rm <remote-name>
移除一個遠(yuǎn)程倉庫那槽。
git remote add origin http://github.com/username/<repo name>.git
Create a remote repo named origin pointing at your Github repo (after you’ve already created the repo on Github) (used if you git init since the repo you created locally isn’t linked to a remote repo yet).
git remote add origin git@github.com:username/<repo name>.git
Create a remote repo named origin pointing at your Github repo (using SSH url instead of HTTP url).
clone
git clone git@github.com:username/<repo name>.git
從遠(yuǎn)程庫(origin)克隆一份到本地,倉庫名同遠(yuǎn)程倉庫名茸歧。
git clone https://github.com/username/repo name.git
作用同上倦炒。但 不建議使用 https 協(xié)議,原因有二:一是速度慢软瞎;二是每次推送必須輸入口令逢唤,麻煩。但在某些只開放 http 端口的公司內(nèi)部就無法使用原生的 ssh 協(xié)議而只能用 https涤浇,倉庫名同遠(yuǎn)程倉庫名鳖藕。
git clone <repo url> <folder name>
克隆一個倉庫到指定文件夾。
git clone <repo url> .
克隆一個倉庫到當(dāng)前文件夾(應(yīng)該是空的)只锭。
Branch
branch & merge
git branch
列出本地當(dāng)前所有分支著恩,方便查看。當(dāng)前分支前面會標(biāo)有一個 * 號蜻展。
git branch -r
查看遠(yuǎn)程分支列表喉誊。
git branch -a
顯示所有分支,包括本地和遠(yuǎn)程纵顾。
git branch -v
查看每一次分支的最后一次提交伍茄。
git branch -vv
查看設(shè)置的所有跟蹤分支。將所有的本地分支列出來并且包含更多的信息施逾,如每一個分支正在跟蹤哪個遠(yuǎn)程分支與本地分支是否是領(lǐng)先敷矫、落后或是都有例获。
git branch --merged
查看所有已經(jīng)被 merge 的 branch。
git branch --no-merged
查看所有還沒被 merge 的 branch曹仗。
git branch --merged | xargs git branch -d
刪除所有已經(jīng)被 merge 的 branch榨汤。
git checkout -b 分支
**創(chuàng)建 **并 **切換 到新的分支,相當(dāng)于下面兩條命令:git branch 分支 + git checkout **分支怎茫。
git checkout -
切換到上一個 branch收壕。
git cherry-pick <commit id>
假如我們在某個 branch 做了一大堆 commit,而當(dāng)前 branch 想應(yīng)用其中的一個轨蛤,可以使用該命令啼器。
git merge 分支
合并指定分支到當(dāng)前所在的分支。
git merge --no-ff -m "提交說明信息" 分支
參數(shù) –no-ff 表示 禁用 Fast forward 快進(jìn)模式俱萍,用普通模式合并,這樣合并后的歷史有分支告丢,能看出來曾經(jīng)做過合并枪蘑,而 fast forwad 合并就看不出來曾經(jīng)做過合并。
git branch -d 分支
普通刪除分支(相對強(qiáng)制刪除而言)岖免。一般情況下岳颇,先合并完分支,然后再刪除颅湘,否則會刪除失敗话侧,除非使用 -D 參數(shù)強(qiáng)制刪除。注意:因為創(chuàng)建闯参、合并和刪除分支非痴芭簦快,所以 Git 鼓勵使用分支完成某個任務(wù)鹿寨,合并后再刪除分支新博,這個直接在 master 分支上工作效果是一樣的,但過程更安全脚草。
git branch -D 分支
強(qiáng)行刪除分支赫悄,尤其適用分支內(nèi)容有了新的修改但還沒有被合并的情況。
git push origin --delete 遠(yuǎn)程分支 或 git push origin:遠(yuǎn)程分支
刪除一個遠(yuǎn)程分支馏慨。基本上這個命令做的只是從服務(wù)器上移除這個指針埂淮。 Git 服務(wù)器通常會保留數(shù)據(jù)一段時間直到垃圾回收運行,所以如果不小心刪除掉了写隶,通常是很容易恢復(fù)的倔撞。
git push origin -delete 分支
在本地和遠(yuǎn)程同步刪除分支。
git rebase 目標(biāo)分支(通常是 master)
在本地 master 上進(jìn)行變基操作樟澜。注意:merge 與 rebase 都是整合來自不同分支的修改误窖。
merge 會把兩個分支的最新快照以及二者最近的共同祖先進(jìn)行三方合并叮盘,合并的結(jié)果是生成一個新的快照(并提交)。
rebase 會把提交到某一分支(當(dāng)前分支)上的所有修改都轉(zhuǎn)移至另一分支(目標(biāo)分支)上霹俺,就好像“重新播放”一樣柔吼。
變基是將一系列提交按照原有次序依次應(yīng)用到另一分支上,而合并是把最終結(jié)果合在一起丙唧。簡言之:這兩種整合方法的最終結(jié)果沒有任何區(qū)別愈魏,但是變基使得提交歷史更加整潔。
采用變基操作后想际,項目的最終維護(hù)者就不再需要進(jìn)行整合工作培漏,只需要快進(jìn)合并便可。
git rebase –ongo 目標(biāo)分支 第一分支 第二分支:選中在第二分支里但不在第一分支里的修改胡本,將它們在目標(biāo)分支(通常是 master)上重演牌柄。
變基有風(fēng)險,需要遵守的準(zhǔn)則是:不要對在你的倉庫外有副本的分支執(zhí)行變基侧甫。否則珊佣,會導(dǎo)致混亂∨冢總的原則是咒锻,只對尚未推送或分享給別人的本地修改執(zhí)行變基操作清理歷史,從不對已推送至別處的提交執(zhí)行變基操作守屉,這樣才能享受到兩種方式帶來的便利惑艇。
還可以有這樣的命令:git rebase -i master,git rebase -i 22e21f2拇泛,git rebase -i HEAD~3滨巴。
stash
git stash
把當(dāng)前分支的工作現(xiàn)場儲存起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作碰镜。一般適用于還沒有 commit 的分支代碼兢卵。
git stash list
查看儲存的工作現(xiàn)場紀(jì)錄列表。
git stash apply + git stash drop
用 git stash apply 命令恢復(fù)最近 stash 過的工作現(xiàn)場绪颖,但是恢復(fù)后秽荤,stash 內(nèi)容并不刪除,用 git stash drop 命令來刪除柠横。apply 和 drop 后面都可以加上某一指定的 stash_id窃款。
git stash pop
相當(dāng)于上面兩條命令,恢復(fù)回到工作現(xiàn)場的同時把 stash 內(nèi)容也刪除了牍氛。
git stash clear
清空所有暫存區(qū)的 stash 紀(jì)錄晨继。drop 是只刪除一條,當(dāng)然后面可以跟 stash_id 參數(shù)來刪除指定的某條紀(jì)錄搬俊,不跟參數(shù)就是刪除最近的紊扬。
git stash apply stash@{0}
上面命令中 大括號中的數(shù)字不是固定的蜒茄,因為可以多次 stash,恢復(fù)的時候餐屎,先用 git stash list 命令查看檀葛,然后恢復(fù)指定的 stash。
git biselect
發(fā)現(xiàn)了一個 bug腹缩,用該命令知道是哪個 commit 導(dǎo)致的屿聋,貌似不太好用。
pull & push
git push origin 分支
把該分支上的所有本地提交推送到遠(yuǎn)程庫對應(yīng)的遠(yuǎn)程分支上藏鹊。
git checkout 分支 origin/分支
如果遠(yuǎn)程有某一個分支而本地沒有润讥,怎用該命令把遠(yuǎn)程的這個分支遷到本地。
git checkout -b 分支 origin/分支
把遠(yuǎn)程分支遷到本地順便****切換到該分支盘寡。
git pull
抓取遠(yuǎn)程庫最新提交楚殿,拉取并合并。
git fetch
沒有 merge 的 pull竿痰。
git branch --set-upstream 分支 origin/分支
建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián)勒魔。
git submodule update --recursive
第三方依賴與遠(yuǎn)程同步,還可以在最后添加 -f 參數(shù)菇曲。
Tag
init tag
git tag
查看所有標(biāo)簽。注意:標(biāo)簽不是按照時間列出抚吠,而是按照字母排序常潮,但這并不重要。
git show <tag-name>
查看標(biāo)簽信息楷力。
git tag -l 'tag-name'
使用特定的模式查找標(biāo)簽喊式。
git checkout <tag-name>
切換 tag。
git tag <tag name> <commit id>
在需要打標(biāo)簽的分支上創(chuàng)建一個輕量標(biāo)簽(lightweight)萧朝,默認(rèn)為 HEAD岔留,也可以指定一個 commit id。
git tag -a <tag-name> -m "標(biāo)簽說明文字" <commit id>
創(chuàng)建附注標(biāo)簽(annotated)检柬,用 -a 指定標(biāo)簽名献联,-m 指定說明文字,也可以指定一個 commit id何址。
git tag -a <tag-name> 提交的校驗和或部分校驗和
后期打標(biāo)簽里逆,即對過去的提交打標(biāo)簽。校驗和(checksum):長度為 40位的16進(jìn)制數(shù)的 SHA-1 值字符串用爪。然而原押,只要沒有沖突,通迟搜可以用一個比較短的前綴來表示一個 commit诸衔。
git tag -s <tag-name> -m "標(biāo)簽說明文字" <commit id>
通過 -s 用私鑰簽名一個標(biāo)簽盯漂。簽名采用 GPG 簽名,因此笨农,必須首先按照 pgp(GnuPG)就缆,如果沒有找到 gpg,或者沒有 gpg 秘鑰對磁餐,就會報錯违崇。如果報錯,請參考 GnuPG 幫助文檔配置 Key诊霹。
manipulate tag
git tag -d <tag-name>
刪除一個本地標(biāo)簽羞延。因為創(chuàng)建的標(biāo)簽都只存儲在本地,不會自動推送到遠(yuǎn)程脾还。所以伴箩,打錯的標(biāo)簽可以在本地安全刪除。
git push origin <tag-name>
推送本地某個標(biāo)簽到遠(yuǎn)程鄙漏,默認(rèn)情況下嗤谚,git push 命令并不會推送標(biāo)簽到遠(yuǎn)程,必須顯示推送怔蚌。
git push origin --tags
參數(shù) **–****tags **表示一次性推送全部未推送到遠(yuǎn)程的本地標(biāo)簽巩步,當(dāng)其他人從倉庫中克隆或拉取,他們也能得到那些標(biāo)簽桦踊。
git push origin :refs/tags/<tag-name>
刪除一個遠(yuǎn)程標(biāo)簽椅野,先從本地刪除,再用該命令從遠(yuǎn)程刪除籍胯。
git checkout -b <branch-name> <tag-name>
在特定的標(biāo)簽上創(chuàng)建一個新分支竟闪,貌似沒什么卵用。
Custom git
ignore
git add -f 文件
使用 **-f 參數(shù)杖狼,強(qiáng)制添加被 .gitignore **忽略的文件到 Git炼蛤。
git check-ignore -v 文件
可能是 .gitignore 寫得有問題,使用該命令找出到底哪個命令寫錯了蝶涩。
https://github.com/github/gitignore
GitHub 上的一個十分詳細(xì)的針對數(shù)十種項目及語言的 .gitignore 文件列表理朋。
注意:
忽略某些文件時,需要編寫 .gitignore 文件绿聘;
.gitignore 文件本身要放到版本庫里暗挑,并且可以對 .gitignore 做版本管理。
alias
git config --global alias.st status
使用 git st 代替 git status 命令斜友。
git config --global alias.co checkout
使用 git co 代替** git checkout** 命令炸裆。
git config --global alias.cm commit
使用 git cm 代替** git commit **命令。
git config --global alias.br branch
使用 git br 代替 **git branch **命令鲜屏。
git config --global alias.unstage 'reset HEAD --'
使用 git unstage 文件 命令代替** git reset HEAD – 文件** 命令烹看。
git config --global alias.last 'log -1'
配置一個** git last **命令国拇,讓其顯示最近一次的提交信息。
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
喪心病狂地配置 git lg 命令惯殊,讓顯示 log 更加優(yōu)雅酱吝,逼格更高。
git config --global alias.visual '!gitk'
Git 只是簡單地將別名替換為對應(yīng)的命令土思。如果想要執(zhí)行外部命令而不是一個 Git 子命令务热,可以在命令前面加入 !符號。 如果自己要寫一些與 Git 倉庫協(xié)作的工具的話己儒,那會很有用崎岂。貌似沒什么卵用。
Help
git help <key>
git <key> --help
**man git-<key> **
git --help
Others
git config -l 或 git config --list
列舉所有 Git 能找到的配置闪湾,如果有重復(fù)的變量名冲甘,Git 會使用它找到的每一個變量的最后一個配置。
git config <key>
檢查 Git 的某一項配置途样。
git config --glabal core.editor <vim/emacs/...>
配置默認(rèn)文本編輯器江醇。
git config --global color.ui true
讓 Git 顯示顏色,使命令輸出看起來更醒目何暇。
git config core.ignorecase false
Git 是大小寫不敏感的陶夜,如果要大小寫敏感需要執(zhí)行此命令。
git config --global core.quotepath false
設(shè)置顯示中文文件名裆站。
git config --global credential.helper cache
如果正在使用 HTTPS URL 來推送律适,Git 服務(wù)器會詢問用戶名與密碼。 默認(rèn)情況下它會在終端中提示服務(wù)器是否允許你進(jìn)行推送遏插。如果不想在每一次推送時都輸入用戶名與密碼,可以設(shè)置一個 “credential cache”纠修。 最簡單的方式就是將其保存在內(nèi)存中幾分鐘胳嘲,使用該命令即可,貌似沒什么卵用扣草。
git config --global user.name "your name"
git config --global user.email "your email"
設(shè)置 commit 中的姓名和 email了牛,去掉 –global 參數(shù)則為針對每個 repo 單獨設(shè)定姓名和郵箱。
git commit --author "your name <your email>"
以其他身份 commit辰妙。
git mv old_filename new_filename
重命名文件鹰祸。相當(dāng)于下面三條命令:
mv old_filename new_filename
git rm old_filename
git add new_filename
git log 常用選項:
-p — 按補(bǔ)丁格式顯示每個更新之間的差異。
–stat — 顯示每次更新的文件修改統(tǒng)計信息密浑。
–shortstat — 只顯示 –stat 中最后的行數(shù)修改添加移除統(tǒng)計蛙婴。
–name-only — 僅在提交信息后顯示已修改的文件清單。
–name-status – 顯示新增尔破、修改街图、刪除的文件清單浇衬。
–abbrev-commit — 僅顯示 SHA-1 的前幾個字符,而非所有的 40 個字符餐济。
–relative-date — 使用較短的相對時間顯示(比如耘擂,“2 weeks ago”)。
–graph — 顯示 ASCII 圖形表示的分支合并歷史絮姆。
–pretty — 使用其他格式顯示歷史提交信息醉冤。可用的選項包括 oneline篙悯,short蚁阳,full,fuller 和 format(后跟指定格式)辕近。
git log --pretty=format:"%h - %an, %ar : %s"
自定義 log 顯示樣式韵吨,也可帶有 –graph 參數(shù)。常用的格式占位符寫法及其代表的意義:
%H — 提交對象(commit)的完整哈希字串
%h — 提交對象的簡短哈希字串
%T — 樹對象(tree)的完整哈希字串
%t — 樹對象的簡短哈希字串
%P — 父對象(parent)的完整哈希字串
%p — 父對象的簡短哈希字串
%an — 作者(author)的名字
%ae — 作者的電子郵件地址
%ad — 作者修訂日期(可以用 –date= 選項定制格式)
%ar — 作者修訂日期移宅,按多久以前的方式顯示
%cn — 提交者(committer)的名字
%ce — 提交者的電子郵件地址
%cd — 提交日期
%cr — 提交日期归粉,按多久以前的方式顯示
%s — 提交說明
git log --since=2.weeks
顯示按照時間限制的 log 信息,這個時間格式可以是:“2008-01-15” 或 “2 years 1 day 3 minutes ago” 等漏峰】返浚可用的參數(shù)還有:–until,–author浅乔,–grep(提交說明中的關(guān)鍵字)等倔喂。注意:如果要得到同時滿足這兩個選項搜索條件的提交,就必須用 –all-match 選項靖苇。否則席噩,滿足任意一個條件的提交都會被匹配出來。
git log -Sfunction_name
顯示添加或移除某一個特定函數(shù)的引用(字符串)的提交贤壁。
限制 git log 輸出的選項:
-(n) — 僅顯示最近的 n 條提交悼枢。
–since, –after — 僅顯示指定時間之后的提交。
–until, –before — 僅顯示指定時間之前的提交脾拆。
–author — 僅顯示指定作者相關(guān)的提交馒索。
–committer — 僅顯示指定提交者相關(guān)的提交。
–grep — 僅顯示含指定關(guān)鍵字的提交名船。
-S — 僅顯示添加或移除了某個關(guān)鍵字的提交绰上。
For example,git log –pretty=”%h - %s” –author=gitster –since=”2008-10-01” \ –before=”2008-11-01” –no-merges – t/渠驼,即為:查看 Git 倉庫中蜈块,2008 年 10 月期間,作者提交的但未合并的測試文件。
git config 保存用戶名和密碼
打開C盤用戶路徑下的.gitconfig文件,編輯如下
[user]
name = 用戶名
email = 郵箱
password = 密碼
[credential]
helper = store
git 查詢某段時間內(nèi)某個用戶提交的代碼行數(shù)
git log --author=用戶名 --since=2023-03-26 --until=2023-04-04 --pretty=tformat: --numstat | awk '{loc+=($1-$2)} END {print loc}'