眾所周知,Git是一個(gè)“分布式版本管理工具”,簡(jiǎn)單的理解版本管理工具。本文介紹了與使用Git相關(guān)的72個(gè)技巧,文末附帶一張超詳細(xì)的腦圖。GitHub發(fā)布3天已經(jīng)超過4000星,值得收藏!
大家在用Git寫東西的時(shí)候都用過 “回撤” 這個(gè)功能,但是回撤只能回撤幾步,假如想要找回我三天之前的修改,光用 “回撤” 是找不回來(lái)的。
而 “版本管理工具” 能記錄每次的修改,只要提交到版本倉(cāng)庫(kù),你就可以找到之前任何時(shí)刻的狀態(tài)(文本狀態(tài))。
下面的內(nèi)容就是列舉了常用的 Git 命令和一些小技巧,可以通過 "頁(yè)面內(nèi)查找" 的方式進(jìn)行快速查詢:Ctrl/Command+f。
開卷必讀
如果之前未使用過 Git,可以學(xué)習(xí) Git 小白教程入門
1、一定要先測(cè)試命令的效果后,再用于工作環(huán)境中,以防造成不能彌補(bǔ)的后果!到時(shí)候別拿著砍刀來(lái)找我。
2、所有的命令都在git version 2.7.4 (Apple Git-66)下測(cè)試通過。
3、統(tǒng)一概念:
工作區(qū):改動(dòng)(增刪文件和內(nèi)容);
暫存區(qū):輸入命令:git add 改動(dòng)的文件名,此次改動(dòng)就放到了 ‘暫存區(qū)’;
本地倉(cāng)庫(kù)(簡(jiǎn)稱:本地):輸入命令:git commit 此次修改的描述,此次改動(dòng)就放到了 ’本地倉(cāng)庫(kù)’,每個(gè) commit,我叫它為一個(gè) ‘版本’;
遠(yuǎn)程倉(cāng)庫(kù)(簡(jiǎn)稱:遠(yuǎn)程):輸入命令:git push 遠(yuǎn)程倉(cāng)庫(kù),此次改動(dòng)就放到了 ‘遠(yuǎn)程倉(cāng)庫(kù)’(GitHub 等);
commit-id:輸出命令:git log,最上面那行 commit xxxxxx,后面的字符串就是 commit-id。
目錄
展示幫助信息
回到遠(yuǎn)程倉(cāng)庫(kù)的狀態(tài)
重設(shè)第一個(gè)commit
展示工作區(qū)和暫存區(qū)的不同
展示暫存區(qū)和最近版本的不同
展示暫存區(qū)、工作區(qū)和最近版本的不同
快速切換分支上一個(gè)分支
刪除已經(jīng)合并到 master 的分支
展示本地分支關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)的情況
關(guān)聯(lián)遠(yuǎn)程分支
列出所有遠(yuǎn)程分支
列出本地和遠(yuǎn)程分支
創(chuàng)建并切換到本地分支
從遠(yuǎn)程分支中創(chuàng)建并切換到本地分支
刪除本地分支
刪除遠(yuǎn)程分支
重命名本地分支
查看標(biāo)簽
查看標(biāo)簽詳細(xì)信息
本地創(chuàng)建標(biāo)簽
推送標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù)
刪除本地標(biāo)簽
刪除遠(yuǎn)程標(biāo)簽
切回到某個(gè)標(biāo)簽
放棄工作區(qū)的修改
恢復(fù)刪除的文件
以新增一個(gè) commit 的方式還原某一個(gè) commit 的修改
回到某個(gè) commit 的狀態(tài),并刪除后面的 commit
修改上一個(gè) commit 的描述
查看 commit 歷史
顯示本地更新過 HEAD 的 git 命令記錄
修改作者名
修改遠(yuǎn)程倉(cāng)庫(kù)的 url
增加遠(yuǎn)程倉(cāng)庫(kù)
列出所有遠(yuǎn)程倉(cāng)庫(kù)
查看兩個(gè)星期內(nèi)的改動(dòng)
把 A 分支的某一個(gè) commit,放到 B 分支上
給 git 命令起別名
存儲(chǔ)當(dāng)前的修改,但不用提交 commit
保存當(dāng)前狀態(tài),包括 untracked 的文件
展示所有 stashes
回到某個(gè) stash 的狀態(tài)
回到最后一個(gè) stash 的狀態(tài),并刪除這個(gè) stash
刪除所有的 stash
從 stash 中拿出某個(gè)文件的修改
展示所有 tracked 的文件
展示所有 untracked 的文件
展示所有忽略的文件
強(qiáng)制刪除 untracked 的文件
強(qiáng)制刪除 untracked 的目錄
展示簡(jiǎn)化的 commit 歷史
查看某段代碼是誰(shuí)寫的
把某一個(gè)分支到導(dǎo)出成一個(gè)文件
從包中導(dǎo)入分支
執(zhí)行 rebase 之前自動(dòng) stash
從遠(yuǎn)程倉(cāng)庫(kù)根據(jù) ID,拉下某一狀態(tài),到本地分支
詳細(xì)展示一行中的修改
清除 .gitignore 文件中記錄的文件
展示所有 alias 和 configs
展示忽略的文件
commit 歷史中顯示 Branch1 有的,但是 Branch2 沒有 commit
在 commit log 中顯示 GPG 簽名
刪除全局設(shè)置
新建并切換到新分支上,同時(shí)這個(gè)分支沒有任何 commit
展示任意分支某一文件的內(nèi)容
clone 下來(lái)指定的單一分支
忽略某個(gè)文件的改動(dòng)
忽略文件的權(quán)限變化
以最后提交的順序列出所有 Git 分支
在 commit log 中查找相關(guān)內(nèi)容
把暫存區(qū)的指定 file 放到工作區(qū)中
強(qiáng)制推送
一圖詳解
技巧大全詳解
展示幫助信息
githelp-g
Thecommandoutputasbelow:
ThecommonGitguidesare:attributesDefiningattributesperpathcliGitcommand-lineinterfaceandconventionscore-tutorialAGitcoretutorialfordeveloperscvs-migrationGitforCVSusersdiffcoreTweakingdiffoutputeverydayAusefulminimumsetofcommandsforEverydayGitglossaryAGitGlossaryhooksHooksusedbyGitignoreSpecifiesintentionallyuntrackedfilestoignoremodulesDefiningsubmodulepropertiesnamespacesGitnamespacesrepository-layoutGitRepositoryLayoutrevisionsSpecifyingrevisionsandrangesforGittutorialAtutorialintroductiontoGittutorial-2AtutorialintroductiontoGit:parttwoworkflowsAnoverviewofrecommendedworkflowswithGit'githelp-a'and'githelp-g'listavailablesubcommandsandsomeconceptguides.See'githelp
回到遠(yuǎn)程倉(cāng)庫(kù)的狀態(tài)
拋棄本地所有的修改,回到遠(yuǎn)程倉(cāng)庫(kù)的狀態(tài)。
gitfetch--all&&gitreset--hardorigin/master
重設(shè)第一個(gè) commit
也就是把所有的改動(dòng)都重新放回工作區(qū),并清空所有的 commit,這樣就可以重新提交第一個(gè) commit 了。
gitupdate-ref-dHEAD
展示工作區(qū)和暫存區(qū)的不同
輸出工作區(qū)和暫存區(qū)的 different (不同)。
gitdiff
還可以展示本地倉(cāng)庫(kù)中任意兩個(gè) commit 之間的文件變動(dòng):
gitdiff
展示暫存區(qū)和最近版本的不同
輸出暫存區(qū)和本地最近的版本 (commit) 的 different (不同)。
gitdiff--cached
展示暫存區(qū)、工作區(qū)和最近版本的不同
輸出工作區(qū)、暫存區(qū) 和本地最近的版本 (commit) 的 different (不同)。
gitdiffHEAD
快速切換分支上一個(gè)分支
gitcheckout-
刪除已經(jīng)合并到 master 的分支
gitbranch--mergedmaster|grep-v'^*|master'|xargs-n1gitbranch-d
展示本地分支關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)的情況
gitbranch-vv
關(guān)聯(lián)遠(yuǎn)程分支
關(guān)聯(lián)之后,git branch -vv 就可以展示關(guān)聯(lián)的遠(yuǎn)程分支名了,同時(shí)推送到遠(yuǎn)程倉(cāng)庫(kù)直接:git push,不需要指定遠(yuǎn)程倉(cāng)庫(kù)了。
gitbranch-uorigin/mybranch
或者在 push 時(shí)加上 -u 參數(shù):
gitpushorigin/mybranch-u
列出所有遠(yuǎn)程分支
-r 參數(shù)相當(dāng)于:remote:
gitbranch-r
列出本地和遠(yuǎn)程分支
-a 參數(shù)相當(dāng)于:all
gitbranch-a
創(chuàng)建并切換到本地分支
gitcheckout-b
從遠(yuǎn)程分支中創(chuàng)建并切換到本地分支
gitcheckout-b
刪除本地分支
gitbranch-d
刪除遠(yuǎn)程分支
gitpushorigin--delete
或者
gitpushorigin:
重命名本地分支
gitbranch-m
查看標(biāo)簽
gittag
展示當(dāng)前分支的最近的 tag
gitdescribe--tags--abbrev=0
查看標(biāo)簽詳細(xì)信息
gittag-ln
本地創(chuàng)建標(biāo)簽
gittag
默認(rèn) tag 是打在最近的一次 commit 上,如果需要指定 commit 打 tag:
$gittag-a
推送標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù)
首先要保證本地創(chuàng)建好了標(biāo)簽才可以推送標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù):
gitpushorigin
一次性推送所有標(biāo)簽,同步到遠(yuǎn)程倉(cāng)庫(kù):
gitpushorigin--tags
刪除本地標(biāo)簽
gittag-d
刪除遠(yuǎn)程標(biāo)簽
刪除遠(yuǎn)程標(biāo)簽需要先刪除本地標(biāo)簽,再執(zhí)行下面的命令:
gitpushorigin:refs/tags/
切回到某個(gè)標(biāo)簽
一般上線之前都會(huì)打 tag,就是為了防止上線后出現(xiàn)問題,方便快速回退到上一版本。下面的命令是回到某一標(biāo)簽下的狀態(tài):
gitcheckout-bbranch_nametag_name
放棄工作區(qū)的修改
gitcheckout
放棄所有修改:
gitcheckout.
恢復(fù)刪除的文件
gitrev-list-n1HEAD--
以新增一個(gè) commit 的方式還原某一個(gè) commit 的修改
gitrevert
回到某個(gè) commit 的狀態(tài),并刪除后面的 commit
和 revert 的區(qū)別:reset 命令會(huì)抹去某個(gè) commit id 之后的所有 commit
gitreset
修改上一個(gè) commit 的描述
gitcommit--amend
查看 commit 歷史
gitlog
查看某段代碼是誰(shuí)寫的
blame 的意思為‘責(zé)怪’,你懂的。
gitblame
顯示本地更新過 HEAD 的 git 命令記錄
每次更新了 HEAD 的 git 命令比如 commint、amend、cherry-pick、reset、revert 等都會(huì)被記錄下來(lái)(不限分支),就像 shell 的 history 一樣。這樣你可以 reset 到任何一次更新了 HEAD 的操作之后,而不僅僅是回到當(dāng)前分支下的某個(gè) commit 之后的狀態(tài)。
gitreflog
修改作者名
gitcommit--amend--author='AuthorName
修改遠(yuǎn)程倉(cāng)庫(kù)的 url
gitremoteset-urlorigin
增加遠(yuǎn)程倉(cāng)庫(kù)
gitremoteaddorigin
列出所有遠(yuǎn)程倉(cāng)庫(kù)
gitremote
查看兩個(gè)星期內(nèi)的改動(dòng)
gitwhatchanged--since='2weeksago'
把 A 分支的某一個(gè) commit,放到 B 分支上
這個(gè)過程需要 cherry-pick 命令
gitcheckout
給 git 命令起別名
簡(jiǎn)化命令
gitconfig--globalalias.
存儲(chǔ)當(dāng)前的修改,但不用提交 commit
詳解可以參考廖雪峰老師的 git 教程
gitstash
保存當(dāng)前狀態(tài),包括 untracked 的文件
untracked 文件:新建的文件
gitstash-u
展示所有 stashes
gitstashlist
回到某個(gè) stash 的狀態(tài)
gitstashapply
回到最后一個(gè) stash 的狀態(tài),并刪除這個(gè) stash
gitstashpop
刪除所有的 stash
gitstashclear
從 stash 中拿出某個(gè)文件的修改
gitcheckout
展示所有 tracked 的文件
gitls-files-t
展示所有 untracked 的文件
gitls-files--others
展示所有忽略的文件
gitls-files--others-i--exclude-standard
強(qiáng)制刪除 untracked 的文件
可以用來(lái)刪除新建的文件。如果不指定文件文件名,則清空所有工作的 untracked 文件。clean 命令,注意兩點(diǎn):
clean 后,刪除的文件無(wú)法找回;
不會(huì)影響 tracked 的文件的改動(dòng),只會(huì)刪除 untracked 的文件。
gitclean
強(qiáng)制刪除 untracked 的目錄
可以用來(lái)刪除新建的目錄,注意:這個(gè)命令也可以用來(lái)刪除 untracked 的文件。詳情見上一條。
gitclean
展示簡(jiǎn)化的 commit 歷史
gitlog--pretty=oneline--graph--decorate--all
把某一個(gè)分支到導(dǎo)出成一個(gè)文件
gitbundlecreate
從包中導(dǎo)入分支
新建一個(gè)分支,分支內(nèi)容就是上面 git bundle create 命令導(dǎo)出的內(nèi)容
gitclonerepo.bundle
執(zhí)行 rebase 之前自動(dòng) stash
gitrebase--autostash
從遠(yuǎn)程倉(cāng)庫(kù)根據(jù) ID,拉下某一狀態(tài),到本地分支
gitfetchoriginpull/
詳細(xì)展示一行中的修改
gitdiff--word-diff
清除 gitignore 文件中記錄的文件
gitclean-X-f
展示所有 alias 和 configs
注意:config 分為:當(dāng)前目錄(local)和全局(golbal)的 config,默認(rèn)為當(dāng)前目錄的 config
gitconfig--local--list(當(dāng)前目錄)gitconfig--global--list(全局)
展示忽略的文件
gitstatus--ignored
commit 歷史中顯示 Branch1 有的,但是 Branch2 沒有 commit
gitlogBranch1^Branch2
在 commit log 中顯示 GPG 簽名
gitlog--show-signature
刪除全局設(shè)置
gitconfig--global--unset
新建并切換到新分支上,同時(shí)這個(gè)分支沒有任何 commit
相當(dāng)于保存修改,但是重寫 commit 歷史
gitcheckout--orphan
展示任意分支某一文件的內(nèi)容
gitshow
clone 下來(lái)指定的單一分支
gitclone-b
忽略某個(gè)文件的改動(dòng)
關(guān)閉 track 指定文件的改動(dòng),也就是 Git 將不會(huì)在記錄這個(gè)文件的改動(dòng)
gitupdate-index--assume-unchangedpath/to/file
恢復(fù) track 指定文件的改動(dòng)
gitupdate-index--no-assume-unchangedpath/to/file
忽略文件的權(quán)限變化
不再將文件的權(quán)限變化視作改動(dòng)
gitconfigcore.fileModefalse
以最后提交的順序列出所有 Git 分支
最新的放在最上面
gitfor-each-ref--sort=-committerdate--format='%(refname:short)'refs/heads/
在 commit log 中查找相關(guān)內(nèi)容
通過 grep 查找,given-text:所需要查找的字段
gitlog--all--grep='
把暫存區(qū)的指定 file 放到工作區(qū)中
不添加參數(shù),默認(rèn)是 -mixed
gitreset
強(qiáng)制推送
gitpush-f
一圖詳解
-
管理工具
+關(guān)注
關(guān)注
0文章
24瀏覽量
7577 -
Git
+關(guān)注
關(guān)注
0文章
196瀏覽量
15722
原文標(biāo)題:GitHub三天超4K星:玩轉(zhuǎn)Git的72個(gè)神奇技巧
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論