建立遠(yuǎn)程倉(cāng)庫(kù),無(wú)非就是想把本地創(chuàng)建的git倉(cāng)庫(kù)上傳到github倉(cāng)庫(kù),達(dá)到本地和github的同步挠锥,首先進(jìn)入github官網(wǎng)創(chuàng)建一個(gè)賬號(hào),然后進(jìn)行項(xiàng)目的創(chuàng)建 侨赡,? 點(diǎn)擊“Create repository”按鈕
然后使用github創(chuàng)建好的SSH 進(jìn)行本地倉(cāng)庫(kù)的克隆
首先找到本地的一個(gè)目錄蓖租,使用 git clone 本項(xiàng)目在github上的SSH地址
克隆好之后粱侣,把你本地創(chuàng)建好的項(xiàng)目中的內(nèi)容復(fù)制到本地克隆好的倉(cāng)庫(kù)的目錄下
克隆好之后,把你本地創(chuàng)建好的項(xiàng)目中的內(nèi)容復(fù)制到本地克隆好的倉(cāng)庫(kù)的目錄下
然后使用 git add -A? 進(jìn)行全部?jī)?nèi)容的添加蓖宦,先添加到暫存區(qū)齐婴,在使用 git commit -m"this is first commit"? 把暫存區(qū)的內(nèi)容提交到本地倉(cāng)庫(kù)中,在使用push 到遠(yuǎn)程倉(cāng)庫(kù)中稠茂,? 達(dá)到同步的目的柠偶。
創(chuàng)建與合并分支
查看分支:git branch
創(chuàng)建分支:git branch name
切換分支:git checkout name
創(chuàng)建+切換分支:git checkout -b name
合并某分支到當(dāng)前分支:git merge name
刪除分支:git branch -d name
用git log --graph命令可以看到分支合并圖.
git merge --no-ff -m"merge with no-ff" dev
--no-ff 表示不使用Fast forward快速模式合并分支,如果使用這種方法 因?yàn)楸敬魏喜⒁獎(jiǎng)?chuàng)建一個(gè)新的commit睬关,所以加上-m參數(shù)诱担,把commit描述寫進(jìn)去。
合并后电爹,我們用git log看看分支歷史:
$ git log --graph --pretty=oneline --abbrev-commit
合并分支時(shí)蔫仙,加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支丐箩,能看出來(lái)曾經(jīng)做過(guò)合并摇邦,而fast forward合并就看不出來(lái)曾經(jīng)做過(guò)合并
修復(fù)bug時(shí),我們會(huì)通過(guò)創(chuàng)建新的bug分支進(jìn)行修復(fù)屎勘,然后合并施籍,最后刪除;
當(dāng)手頭工作沒(méi)有完成時(shí)概漱,先把工作現(xiàn)場(chǎng)git stash一下丑慎,然后去修復(fù)bug,修復(fù)后瓤摧,再git stash pop竿裂,回到工作現(xiàn)場(chǎng)
工作現(xiàn)場(chǎng)還在,Git把stash內(nèi)容存在某個(gè)地方了姻灶,但是需要恢復(fù)一下铛绰,有兩個(gè)辦法:
一是用git stash apply恢復(fù),但是恢復(fù)后产喉,stash內(nèi)容并不刪除捂掰,你需要用git stash drop來(lái)刪除;
另一種方式是用git stash pop曾沈,恢復(fù)的同時(shí)把stash內(nèi)容也刪了
用git stash list命令查看隱藏的工作區(qū)
如果要丟棄一個(gè)沒(méi)有被合并過(guò)的分支这嚣,可以通過(guò)git branch -D 強(qiáng)行刪除
要查看遠(yuǎn)程庫(kù)的信息,用git remote
或者塞俱,用git remote -v顯示更詳細(xì)的信息
當(dāng)你的小伙伴從遠(yuǎn)程庫(kù)clone時(shí)姐帚,默認(rèn)情況下,你的小伙伴只能看到本地的master分支障涯。不信可以用git branch命令看看
現(xiàn)在罐旗,你的小伙伴要在dev分支上開發(fā)膳汪,就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地,于是他用這個(gè)命令創(chuàng)建本地dev分支
$git checkout -b dev origin/dev
推送失敗九秀,因?yàn)槟愕男』锇榈淖钚绿峤缓湍阍噲D推送的提交有沖突遗嗽,解決辦法也很簡(jiǎn)單,Git已經(jīng)提示我們鼓蜒,先用git pull把最新的提交從origin/dev抓下來(lái)痹换,然后,在本地合并都弹,解決沖突娇豫,再推送
git pull也失敗了,原因是沒(méi)有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接畅厢,根據(jù)提示冯痢,設(shè)置dev和origin/dev的鏈接
$ git branch--set-upstream dev origin/dev
$git pull
創(chuàng)建標(biāo)簽
命令git tag name?用于新建一個(gè)標(biāo)簽,默認(rèn)為HEAD或详,也可以指定一個(gè)commit id
git tag -a name?-m "blablabla..."可以指定標(biāo)簽信息
git tag -s name?-m "blablabla..."可以用PGP簽名標(biāo)簽
命令git tag可以查看所有標(biāo)簽
$git tag v1.0 ? 創(chuàng)建一個(gè)標(biāo)簽 ?
$git tag v0.96224937 ?給特定的commit id 添加標(biāo)簽
$ gitshowv0.9 ?查看標(biāo)簽內(nèi)容
$git tag -d v0.1 ?刪除標(biāo)簽
因?yàn)閯?chuàng)建的標(biāo)簽都只存儲(chǔ)在本地系羞,不會(huì)自動(dòng)推送到遠(yuǎn)程郭计。所以霸琴,打錯(cuò)的標(biāo)簽可以在本地安全刪除。
如果要推送某個(gè)標(biāo)簽到遠(yuǎn)程昭伸,使用命令$git push origin v1.0
或者梧乘,一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽:? $ git push origin --tags
如果標(biāo)簽已經(jīng)推送到遠(yuǎn)程,要?jiǎng)h除遠(yuǎn)程標(biāo)簽就麻煩一點(diǎn)庐杨,先從本地刪除:$git tag -d v0.9
然后选调,從遠(yuǎn)程刪除。刪除命令也是push灵份,但是格式如下:$git push origin:refs/tags/v0.9
要看看是否真的從遠(yuǎn)程庫(kù)刪除了標(biāo)簽仁堪,可以登陸GitHub查看
讓Git顯示顏色,會(huì)讓命令輸出看起來(lái)更醒目:$git config --global color.uitrue
如果你你發(fā)現(xiàn)填渠,.gitignore寫得有問(wèn)題弦聂,需要找出來(lái)到底哪個(gè)規(guī)則寫錯(cuò)了,可以用git check-ignore命令檢查
忽略某些文件時(shí)氛什,需要編寫.gitignore莺葫;.gitignore文件本身要放到版本庫(kù)里,并且可以對(duì).gitignore做版本管理枪眉!
配置別名
如果敲git st就表示git status那就簡(jiǎn)單多了
我們只需要敲一行命令捺檬,告訴Git,以后st就表示status:
$git config --global alias.st status
--global參數(shù)是全局參數(shù)贸铜,也就是這些命令在這臺(tái)電腦的所有Git倉(cāng)庫(kù)下都有用
命令git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage)堡纬,重新放回工作區(qū)聂受。既然是一個(gè)unstage操作,就可以配置一個(gè)unstage別名:
$git config --globalalias.unstage'reset HEAD'
當(dāng)你敲入命令:$git unstage test.py
實(shí)際上Git執(zhí)行的是:$ git reset HEAD test.py
配置一個(gè)git last烤镐,讓其顯示最后一次提交信息:$git config --global alias.last 'log -1'
配置Git的時(shí)候饺饭,加上--global是針對(duì)當(dāng)前用戶起作用的,如果不加职车,那只針對(duì)當(dāng)前的倉(cāng)庫(kù)起作用瘫俊。
配置文件放哪了?每個(gè)倉(cāng)庫(kù)的Git配置文件都放在.git/config文件中:
$cat .git/config
別名就在[alias]后面悴灵,要?jiǎng)h除別名扛芽,直接把對(duì)應(yīng)的行刪掉即可。
而當(dāng)前用戶的Git配置文件放在用戶主目錄下的一個(gè)隱藏文件.gitconfig中:
這是一個(gè)好東西
git config --globalalias.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