學(xué)習(xí)廖雪峰的Git教程所記的筆記,Git教程 - 廖雪峰的官方網(wǎng)站https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
Windows下Git教程
1. Git簡介
1.1. Git的誕生
Linus創(chuàng)建了Linux净当,世界各地人把源代碼diff給Linus述雾,2002年前Linus手工合并代碼。
2002年后地来,商業(yè)版本控制系統(tǒng)BitKeeper的東家BitMover公司,授權(quán)Linux社區(qū)免費(fèi)使用。
2005年莫绣,開發(fā)Samba的Andrew試圖破解BitKeeper的協(xié)議,被BitMover公司發(fā)現(xiàn)悠鞍,要收回免費(fèi)使用權(quán)对室。
Linus本可以道歉,然后管教弟兄們咖祭,嗯掩宜,這是不可能的。實際情況是:
Linus花了兩周時間自己用C寫了一個分布式版本控制系統(tǒng)么翰,這就是Git牺汤!一個月之內(nèi),Linx系統(tǒng)的源碼已經(jīng)由Git管理了浩嫌!
牛是怎么定義的呢檐迟?大家可以體會一下。
2008年码耐,GitHub網(wǎng)站上線追迟。
1.2. 集中式vs分布式
集中式,版本庫是集中存放在中央服務(wù)器的骚腥,用自己電腦從中央服務(wù)器取得最新版本再干活敦间。
干完活,再把自己的活推送給中央服務(wù)器桦沉。中央服務(wù)器好比圖書館每瞒,改書,先借纯露,回家改剿骨,改完,再放回埠褪。
集中式必須聯(lián)網(wǎng)才能工作浓利。
集中式版本控制挤庇,中央服務(wù)器出問題了,所有人都沒發(fā)干活了贷掖。
分布式嫡秕,每個人的電腦上都是一個完整的版本庫。
分布式版本控制系統(tǒng)安全性高苹威。每個人電腦都有完整的版本庫指蚁,一個人的沒了漱病,從其他人那復(fù)制马昨。
分布式版本控制通常也有一臺充當(dāng)“中央服務(wù)器”的電腦病蛉,方便交換大家的修改。
還有強(qiáng)大的分支管理功能窟哺。
2.安裝Git
在Windows上安裝Git泻轰,在Windows上使用Git,可以從Git官網(wǎng)直接下載安裝程序且轨,然后按默認(rèn)選項安裝即可浮声。
安裝完成后,在開始菜單里找到“Git”->“Git Bash”旋奢,蹦出一個類似命令行窗口的東西泳挥,就說明Git安裝成功!
2.1.增加用戶名和Email
安裝好git后至朗,分布式版本控制羡洁,機(jī)器自報家門,增加用戶名和密碼
git config --global user.name username
git config --global user.email xxxxxx@xx.com
查看倉庫當(dāng)前狀態(tài)
git status
2.2.建文件夾爽丹。
mkdir learngit
cd learngit
pwd
2.3.把目錄編程Git可以管理的倉庫:
git init
查看目錄下所有隱藏文件
ls -ah
3.創(chuàng)建版本庫
3.1.把文件添加到倉庫,可添加多個文件
git add readme.txt file1.txt file2.txt
3.2.把文件提交到倉庫
git commit -m "wrote a readme file,add 3 files"
4.時光機(jī)穿梭
git add
git commit -m ""
git diff
git status
4.1.版本回退
git log 顯示提交日志
git log --pretty=oneline 嫌輸出信息太多,可以加上 --pretty=oneline參數(shù)
git reset --hard HEAD^
HEAD當(dāng)前版本;
HEAD^上個版本;
HEAD^^上上個版本;
往上100個版本HEAD~100
cat readme.txt ;git bash里查看文件內(nèi)容
git reflog ;查看歷史命令
git reset --hard commit_id;
4.2.工作區(qū)和暫存區(qū)
工作區(qū)(Working Directory):電腦里能看到的目錄,如learngit就是一個工作區(qū)辛蚊。
版本庫(Respository):工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū)粤蝎,而是Git的版本庫。
版本庫里最重要的稱為stage(或者叫index)的暫存區(qū)袋马,
還有g(shù)it自動創(chuàng)建的第一個分支master初澎,以及指向master的指針HEAD。
4.3.管理修改
Git比其他版本控制系統(tǒng)設(shè)計的優(yōu)秀虑凛,是因為Git跟蹤并管理的是修改碑宴,而非文件。如:
1
一改:12 后git add桑谍,git status 不同
二改:123后git commit延柠,git status 相同
第一次修改 -> git add -> 第二次修改 -> git commit
第一次修改,git add后锣披,工作區(qū)的第一次修改 放入 暫存區(qū)贞间,準(zhǔn)備提交贿条。
第二次修改 沒放入 暫存區(qū), git commit 只負(fù)責(zé)把暫存區(qū)的修改提交增热。
也就是 第一次修改被提交整以,第二次修改不會被提交。
git status 查看的是暫存區(qū)是否更改
git diff HEAD -- readme.txt可以查看版本庫和工作區(qū)里最新版本的區(qū)別峻仇。
提交第二次修改公黑,需要再次 git add
4.4.撤銷更改
git checkout -- readme.txt ;丟棄工作區(qū)的修改摄咆,工作區(qū)是干凈的(clean)凡蚜。讓工作區(qū)和暫存區(qū)里的版本一致,暫存區(qū)版本為最近一次git add的狀態(tài)
git checkout -- filename ;--很重要豆同,沒有--就變成了切換到另一個分支的命令 git checkout branch_name番刊。
git reset HEAD readme.txt ;把暫存區(qū)修改撤銷掉(unstage),暫存區(qū)是干凈的(clean)
場景1:當(dāng)你改亂了工作區(qū)某個文件的內(nèi)容影锈,想直接丟棄工作區(qū)的修改時芹务,用命令git checkout -- file。
場景2:當(dāng)你不但改亂了工作區(qū)某個文件的內(nèi)容鸭廷,還添加到了暫存區(qū)時枣抱,想丟棄修改,分兩步辆床,第一步用命令git reset HEAD file佳晶,就回到了場景1,第二步按場景1操作讼载。
場景3:已經(jīng)提交了不合適的修改到版本庫時轿秧,想要撤銷本次提交,參考版本回退一節(jié)咨堤,不過前提是沒有推送到遠(yuǎn)程庫菇篡。
4.5.刪除文件
刪除工作區(qū)文件后,要
git rm filename
git commit -m
5.遠(yuǎn)程倉庫
自行注冊GitHub帳號一喘,本地Git倉庫和GitHub倉庫直接的傳輸是通過SSH加密的驱还。
第一步:
創(chuàng)建SSH Key。用戶主目錄下凸克,看看有沒有.ssh目錄议蟆。
有的話,看目錄下有沒有id_rsa和id_rsa.pub萎战,有的話咐容,直接跳到第二步,
沒有的話打開Git Bash撞鹉,創(chuàng)建SSH Key:
ssh-keygen -t rsa -C "xxxx@xx.com"
把郵件地址換成自己的地址疟丙,一直回車颖侄,使用默認(rèn)值。
完成后享郊,目錄下有id_rsa和id_rsa.pub兩個文件览祖,這兩個就是SSH Key的密鑰對。
id_rsa是私鑰id_rsa是私鑰炊琉,不能泄露出去展蒂,id_rsa.pub是公鑰,可以告訴任何人苔咪。
第二步:
登錄GitHub锰悼,打開“Settings”,“SSH and GPG keys”頁面团赏。
點(diǎn)擊New SSH key箕般,填上任意Title,
在Key文本框里粘貼id_rsa.pub文件的內(nèi)容舔清,
點(diǎn)擊下方 Add SSH key丝里。
輸入密碼,確認(rèn)体谒。
為什么GitHub需要SSH Key呢杯聚?因為GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的抒痒,而Git支持SSH協(xié)議幌绍,所以,GitHub只要知道了你的公鑰故响,就可以確認(rèn)只有你自己才能推送傀广。
當(dāng)然,GitHub允許你添加多個Key彩届。假定你有若干電腦主儡,你一會兒在公司提交,一會兒在家里提交惨缆,只要把每臺電腦的Key都添加到GitHub,就可以在每臺電腦上往GitHub推送了丰捷。
最后友情提示坯墨,在GitHub上免費(fèi)托管的Git倉庫,任何人都可以看到喔(但只有你自己才能改)病往。所以捣染,不要把敏感信息放進(jìn)去。
如果你不想讓別人看到Git庫停巷,有兩個辦法耍攘,一個是交點(diǎn)保護(hù)費(fèi)榕栏,讓GitHub把公開的倉庫變成私有的,這樣別人就看不見了(不可讀更不可寫)蕾各。另一個辦法是自己動手扒磁,搭一個Git服務(wù)器,因為是你自己的Git服務(wù)器式曲,所以別人也是看不見的妨托。這個方法我們后面會講到的,相當(dāng)簡單吝羞,公司內(nèi)部開發(fā)必備兰伤。
5.1.添加遠(yuǎn)程庫
登陸GitHub,找到“Create a new repo”按鈕
在Repository name填入learngit钧排,其他保持默認(rèn)設(shè)置敦腔,
點(diǎn)擊下方“Create repository”按鈕,就成功地創(chuàng)建了一個新的Git倉庫:
現(xiàn)在恨溜,我們根據(jù)GitHub的提示符衔,在本地的learngit倉庫下運(yùn)行命令:
git remote add origin git@github.com:ycanye2009/learngit.git
請千萬注意,把上面的ycanye2009替換成你自己的GitHub賬戶名筒捺,
否則柏腻,你在本地關(guān)聯(lián)的就是我的遠(yuǎn)程庫,關(guān)聯(lián)沒有問題系吭,
但是你以后推送是推不上去的五嫂,因為你的SSH Key公鑰不在我的賬戶列表中。
添加后肯尺,遠(yuǎn)程庫的名字就是origin沃缘,這是Git默認(rèn)的叫法,也可以改成別的则吟,
但是origin這個名字一看就知道是遠(yuǎn)程庫槐臀。
下一步,就可以把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上:
git push -u origin master
把本地庫的內(nèi)容推送到遠(yuǎn)程氓仲,用git push命令水慨,實際上是把當(dāng)前分支master推送到遠(yuǎn)程。
由于遠(yuǎn)程庫是空的敬扛,我們第一次推送master分支時晰洒,加上了-u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支啥箭,
還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來谍珊,在以后的推送或者拉取時就可以簡化命令。
只要本地作了提交急侥,就可以通過命令:
git push origin master
把本地master分支的最新修改推送至Github砌滞。
SSH警告
當(dāng)你第一次使用Git的clone或者push命令連接GitHub時侮邀,會得到一個警告。
這是因為Git使用SSH連接贝润,而SSH連接在第一次驗證GitHub服務(wù)器的Key時绊茧,
需要你確認(rèn)GitHub的Key的指紋信息是否真的來自GitHub的服務(wù)器,輸入yes回車即可题暖。
Git會輸出一個警告按傅,告訴你已經(jīng)把GitHub的Key添加到本機(jī)的一個信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
這個警告只會出現(xiàn)一次,后面的操作就不會有任何警告了胧卤。
小結(jié):
要關(guān)聯(lián)一個遠(yuǎn)程庫唯绍,使用命令git remote add origin git@server-name:path/repo-name.git;
關(guān)聯(lián)后枝誊,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容况芒;
此后,每次本地提交后叶撒,只要有必要绝骚,就可以使用命令git push origin master推送最新修改;
5.2.從遠(yuǎn)程庫克隆
git clone git@github.com:ycanye2009/learngit.git
要克隆一個倉庫祠够,首先必須知道倉庫的地址压汪,然后使用git clone命令克隆。
Git支持多種協(xié)議古瓤,包括https止剖,但通過ssh支持的原生git協(xié)議速度最快。
6.分支管理
6.1.創(chuàng)建與合并分支落君。
I.每次提交穿香,都串成一條時間線,這條時間線就是一個分支绎速。在Git里這個分支叫主分支皮获,即master分支。
HEAD不指向提交纹冤,而是指向master洒宝,master指向提交。
II.創(chuàng)建新分支萌京,例如dev待德,建立一個dev指針,指向master相同的提交枫夺,把HEAD指向dev,表示當(dāng)前分支在dev上绘闷。
III.對工作區(qū)的修改和提交橡庞,就是針對dev分支了较坛。
IV.dev完成,dev合并到master扒最,master指向當(dāng)前提交丑勤,HEAD指向master。
V.合并完成吧趣,刪除dev分支法竞。
小結(jié)
Git鼓勵大量使用分支:
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當(dāng)前分支:git merge <name>
Fast-forward “快進(jìn)模式”
刪除分支:git branch -d <name>
6.2.解決沖突。
當(dāng)Git無法自動合并分支時强挫,就必須首先解決沖突岔霸。
解決沖突后,再提交俯渤,合并完成呆细。
用git log --graph命令可以看到分支合并圖
6.3.分支管理策略
I.master分支非常穩(wěn)定,僅用來發(fā)布新版本八匠,平時不能在上面干活絮爷。
II.dev分支,不穩(wěn)定梨树,發(fā)布時坑夯,把dev分支合并到master上,在master上發(fā)布抡四。
小結(jié)
Git分支十分強(qiáng)大柜蜈,在團(tuán)隊開發(fā)中應(yīng)該充分應(yīng)用。
合并分支時床嫌,加上--no-ff參數(shù)就可以用普通模式合并跨释,
合并后的歷史有分支,能看出來曾經(jīng)做過合并厌处,
而fast forward合并就看不出來曾經(jīng)做過合并鳖谈。
6.4.Bug分支
當(dāng)你接到一個修復(fù)一個代號101的bug的任務(wù)時,很自然地阔涉,你想創(chuàng)建一個分支issue-101來修復(fù)它缆娃,但是,等等瑰排,當(dāng)前正在dev上進(jìn)行的工作還沒有提交:
暫存區(qū)是公用的贯要,如果不通過stash命令隱藏,會帶到其它分支(issue-101)去
幸好椭住,Git還提供了一個stash功能崇渗,可以把當(dāng)前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作:git stash
Git的stash恢復(fù),有兩個辦法:
一是用git stash apply恢復(fù)宅广,但是恢復(fù)后葫掉,stash內(nèi)容并不刪除,你需要用git stash drop來刪除跟狱;
另一種方式是用git stash pop俭厚,恢復(fù)的同時把stash內(nèi)容也刪了:
修復(fù)bug時,我們會通過創(chuàng)建新的bug分支進(jìn)行修復(fù)驶臊,然后合并挪挤,最后刪除;
當(dāng)手頭工作沒有完成時关翎,先把工作現(xiàn)場git stash一下扛门,然后去修復(fù)bug,修復(fù)后笤休,用git stash list查看尖飞,再git stash pop,回到工作現(xiàn)場店雅。
6.5.Feature分支
開發(fā)一個新功能(feature)政基,最好新建一個分支;
如果要丟棄一個沒有被合并過的分支闹啦,可以通過git branch -D <name>強(qiáng)行刪除沮明。
6.6.多人協(xié)作
I.查看遠(yuǎn)程庫 git remote ;查看遠(yuǎn)程庫詳細(xì)信息用 git remote -v,無推送權(quán)限窍奋,則看不到push地址
II.推送分支 切換到master分支荐健,git push origin master;切換到dev分支,git push origin dev
需要推送的分支:
master分支是主分支琳袄,因此要時刻與遠(yuǎn)程同步江场;
dev分支是開發(fā)分支,團(tuán)隊所有成員都需要在上面工作窖逗,所以也需要與遠(yuǎn)程同步址否;
bug分支只用于在本地修復(fù)bug,就沒必要推到遠(yuǎn)程了碎紊,除非老板要看看你每周到底修復(fù)了幾個bug佑附;
feature分支是否推到遠(yuǎn)程,取決于你是否和你的小伙伴合作在上面開發(fā)仗考。
總之音同,就是在Git中,分支完全可以在本地自己藏著玩秃嗜,是否推送权均,視你的心情而定顿膨!
III.抓取分支
克隆只會克隆master分支,你的小伙伴要在dev分支上開發(fā)叽赊,就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地虽惭,
于是他用這個命令創(chuàng)建本地dev分支: git checkout -b dev origin/dev ;創(chuàng)建與遠(yuǎn)程倉庫同步的分支蛇尚。
多人協(xié)作的工作模式通常是這樣:
首先,可以試圖用git push origin branch-name推送自己的修改顾画;
如果推送失敗取劫,則因為遠(yuǎn)程分支比你的本地更新,需要先用git pull試圖合并研侣;
如果合并有沖突谱邪,則解決沖突,并在本地提交庶诡;
沒有沖突或者解決掉沖突后惦银,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”末誓,則說明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒有創(chuàng)建扯俱,用命令git branch --set-upstream branch-name origin/branch-name。
這就是多人協(xié)作的工作模式喇澡,一旦熟悉了迅栅,就非常簡單。
小結(jié)
查看遠(yuǎn)程庫信息晴玖,使用git remote -v读存;
本地新建的分支如果不推送到遠(yuǎn)程,對其他人就是不可見的呕屎;
從本地推送分支让簿,使用git push origin branch-name,如果推送失敗秀睛,先用git pull抓取遠(yuǎn)程的新提交尔当;
在本地創(chuàng)建和遠(yuǎn)程分支對應(yīng)的分支,使用git checkout -b branch-name origin/branch-name琅催,本地和遠(yuǎn)程分支的名稱最好一致居凶;
建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name藤抡;
從遠(yuǎn)程抓取分支侠碧,使用git pull,如果有沖突缠黍,要先處理沖突弄兜。
7.標(biāo)簽管理
發(fā)布一個版本時,我們通常先在版本庫中打一個標(biāo)簽(tag)。
標(biāo)簽是版本庫的快照替饿,是指向某個commit的指針语泽,跟分支很像,但分支可以移動视卢,標(biāo)簽不能移動
創(chuàng)建和刪除標(biāo)簽都是瞬間完成的踱卵。
tag就是一個讓人容易記住的有意義的名字,它跟某個commit綁在一起
7.1創(chuàng)建標(biāo)簽
打一個新標(biāo)簽,默認(rèn)標(biāo)簽是打在最新提交的commit上的:git tag v1.0
給某次提交打標(biāo)簽:git tag v10.9 <commit_id>
查看所有標(biāo)簽:git tag 据过;標(biāo)簽不是按時間順序列出惋砂,而是按字母排序的。
查看標(biāo)簽信息:git show <tagname>
創(chuàng)建帶有說明的標(biāo)簽绳锅,用-a指定標(biāo)簽名西饵,-m指定說明文字:git tag -a v0.1 -m "version 0.1 released" 3628164
可以通過-s用私鑰簽名一個標(biāo)簽:
通過-s用私鑰簽名一個標(biāo)簽:git tag -s v0.2 -m "signed version 0.2 released" fec145a
小結(jié)
命令git tag <name>用于新建一個標(biāo)簽,默認(rèn)為HEAD鳞芙,也可以指定一個commit id眷柔;
git tag -a <tagname> -m "blablabla..."可以指定標(biāo)簽信息;
git tag -s <tagname> -m "blablabla..."可以用PGP簽名標(biāo)簽原朝;
命令git tag可以查看所有標(biāo)簽驯嘱。
7.2.操作標(biāo)簽
刪除標(biāo)簽:git tag -d v0.1
推送某個標(biāo)簽到遠(yuǎn)程,使用命令git push origin <tagname>:
一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽:git push origin --tags
如果標(biāo)簽已經(jīng)推送到遠(yuǎn)程竿拆,要刪除遠(yuǎn)程標(biāo)簽就麻煩一點(diǎn)宙拉,先從本地刪除:
git tag -d v0.9
然后,從遠(yuǎn)程刪除丙笋。刪除命令也是push谢澈,但是格式如下:
git push origin :refs/tags/v0.9
小結(jié)
命令git push origin <tagname>可以推送一個本地標(biāo)簽;
命令git push origin --tags可以推送全部未推送過的本地標(biāo)簽御板;
命令git tag -d <tagname>可以刪除一個本地標(biāo)簽锥忿;
命令git push origin :refs/tags/<tagname>可以刪除一個遠(yuǎn)程標(biāo)簽。
8.使用GitHub
fork
clone
push
pull request
小結(jié)
在GitHub上怠肋,可以任意Fork開源倉庫敬鬓;
自己擁有Fork后的倉庫的讀寫權(quán)限;
可以推送pull request給官方倉庫來貢獻(xiàn)代碼笙各。
用git remote -v查看遠(yuǎn)程庫信息
9.自義Git
讓Git顯示顏色钉答,會讓命令輸出看起來更醒目:git config --global color.ui true
9.1.忽略特殊文件
.gitignore
忽略文件的原則是:
I.忽略操作系統(tǒng)自動生成的文件,比如縮略圖等杈抢;
II.忽略編譯生成的中間文件数尿、可執(zhí)行文件等,也就是如果一個文件是通過另一個文件自動生成的惶楼,那自動生成的文件就沒必要放進(jìn)版本庫右蹦,比如Java編譯產(chǎn)生的.class文件诊杆;
III.忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件何陆。
一個完整的.gitignore文件晨汹,內(nèi)容如下:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa
最后一步就是把.gitignore也提交到Git,就完成了贷盲!當(dāng)然檢驗.gitignore的標(biāo)準(zhǔn)是git status命令是不是說working directory clean淘这。
小結(jié)
忽略某些文件時,需要編寫.gitignore巩剖;
.gitignore文件本身要放到版本庫里慨灭,并且可以對.gitignore做版本管理!
9.2.配置別名
I.git status別名git st:git config --global alias.st status
當(dāng)然還有別的命令可以簡寫球及,很多人都用co表示checkout,ci表示commit呻疹,br表示branch:
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
II.git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage)吃引,重新放回工作區(qū)。
既然是一個unstage操作刽锤,就可以配置一個unstage別名:
$ git config --global alias.unstage 'reset HEAD'
III.配置一個git last镊尺,讓其顯示最后一次提交信息:
$ git config --global alias.last 'log -1'
甚至還有人喪心病狂地把lg配置成了:
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"
IV.配置Git的時候,加上--global是針對當(dāng)前用戶起作用的并思,如果不加庐氮,那只針對當(dāng)前的倉庫起作用。
V.配置文件放哪了宋彼?每個倉庫的Git配置文件都放在.git/config文件中:
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:michaelliao/learngit.git
fetch = +refs/heads/:refs/remotes/origin/
[branch "master"]
remote = origin
merge = refs/heads/master
[alias]
last = log -1
別名就在[alias]后面弄砍,要刪除別名,直接把對應(yīng)的行刪掉即可输涕。
VI.而當(dāng)前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中:
而當(dāng)前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中:
$ cat .gitconfig
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = your@email.com
配置別名也可以直接修改這個文件音婶,如果改錯了,可以刪掉文件重新通過命令配置莱坎。
小結(jié)
給Git配置好別名衣式,就可以輸入命令時偷個懶。我們鼓勵偷懶檐什。
END. 附錄:GIT備忘單(GIT CHEAT SHEET)
1.CREATE
Clone an existing repository
$ git clone ssh://user@domain.com/repo.git
Create a new local repository
$ git init
2.LOCAL CHANGES
Changed files in your working directory
$ git status
Changes to tracked files
$ git diff
Add all current changes to the next commit
$ git add .
Add some changes in <file> to the next commit
$ git add -p <file>
Commit all local changes in tracked files
$ git commit -a
Commit previously staged changes
$ git commit
Change the last commit
Don‘t amend published commits!
$ git commit --amend
3.COMMIT HISTORY
Show all commits, starting with newest
$ git log
Show changes over time for a specific file
$ git log -p <file>
Who changed what and when in <file>
$ git blame <file>
4.BRANCHES & TAGS
List all existing branches
$ git branch -av
Switch HEAD branch
$ git checkout <branch>
Create a new branch based
on your current HEAD
$ git branch <new-branch>
Create a new tracking branch based on
a remote branch
$ git checkout --track <remote/branch>
Delete a local branch
$ git branch -d <branch>
Mark the current commit with a tag
$ git tag <tag-name>
5.UPDATE & PUBLISH
List all currently configured remotes
$ git remote -v
Show information about a remote
$ git remote show <remote>
Add new remote repository, named <remote>
$ git remote add <shortname> <url>
Download all changes from <remote>,
but don‘t integrate into HEAD
$ git fetch <remote>
Download changes and directly
merge/integrate into HEAD
$ git pull <remote> <branch>
Publish local changes on a remote
$ git push <remote> <branch>
Delete a branch on the remote
$ git branch -dr <remote/branch>
Publish your tags
$ git push --tags
6.MERGE & REBASE
Merge <branch> into your current HEAD
$ git merge <branch>
Rebase your current HEAD onto <branch>
Don‘t rebase published commits!
$ git rebase <branch>
Abort a rebase
$ git rebase --abort
Continue a rebase after resolving conflicts
$ git rebase --continue
Use your configured merge tool to
solve conflicts
$ git mergetool
Use your editor to manually solve conflicts
and (after resolving) mark file as resolved
$ git add <resolved-file>
$ git rm <resolved-file>
7.UNDO
Discard all local changes in your working
directory
$ git reset --hard HEAD
Discard local changes in a specific file
$ git checkout HEAD <file>
Revert a commit (by producing a new commit
with contrary changes)
$ git revert <commit>
Reset your HEAD pointer to a previous commit
…and discard all changes since then
$ git reset --hard <commit>
…and preserve all changes as unstaged
changes
$ git reset <commit>
…and preserve uncommitted local changes
$ git reset --keep <commit>