初始化git倉(cāng)庫(kù):
git init
自報(bào)家門(mén):
git config --global user.name "xxxx"
git config --global user.email "xxxx"
把文件添加到倉(cāng)庫(kù)(添加前必須文件已存在):
git add readme.txt
提交到倉(cāng)庫(kù):
git commit -m "xxxxx"
xxxxx:本次提交說(shuō)明
查看目前git狀態(tài):
git status
察看提交歷史記錄:
git log
如果煙花繚亂,可以加上參數(shù):
git log --pretty=oneline
回滾到上一版本:
git reset --hard HEAD^
再回到未來(lái)某個(gè)版本:
git reset --hard xxxxxxx
git提供了一個(gè)git reflog命令來(lái)記錄你的每一次命令。
git reflog
git add實(shí)際上是把文件修改添加到暫存區(qū)
git commit實(shí)際上是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。
當(dāng)你亂修改工作區(qū)的內(nèi)容,想丟棄工作區(qū)的修改:
git checkout -- file
當(dāng)你不但亂改了工作區(qū)的內(nèi)容,還修改了暫存區(qū)的內(nèi)容,想丟棄修改,分兩步:
1:git reset HEAD file
2: git checkout -- file
假設(shè)你刪除了某個(gè)文件,有兩個(gè)選擇,第一是你確實(shí)想刪除某個(gè)文件,那就是:
git rm file
第二就是在你刪錯(cuò)了,想還原,那就是:
git checkout -- file
創(chuàng)建sshkey:
ssh-keygen -t rsa -C "youemail@example.com"
接下來(lái)一路回車(chē),生成兩個(gè)文件:id_rsa是私匙,不能泄露。id_rsa.pub是公匙。可以放心告訴任何人
登陸github,add ssh key,title任意填寫(xiě),key里邊粘貼id_rsa.pub內(nèi)容即可。
遠(yuǎn)端先創(chuàng)建一個(gè)倉(cāng)庫(kù),點(diǎn)擊Create a new repo,填寫(xiě)倉(cāng)庫(kù)名字learngit,其他默認(rèn),點(diǎn)擊Create repository。
關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(kù):
git remote add origin git@github.com:guangmangdz/learngit.git
接下來(lái)再推送:
git push -u origin master,實(shí)際上就是把當(dāng)前分支推送到遠(yuǎn)程。由于遠(yuǎn)端庫(kù)是空的,所以加了-u參數(shù),以后可以不加。
從現(xiàn)在起,只要本地做了提交,就可以通過(guò)命令:
git push origin master,把本地master分支最新更改推送之github。
從遠(yuǎn)程庫(kù)克隆:
git clone git@github.com:xxxxxxxx/xxxxx.git
接下來(lái):分支管理
創(chuàng)建分支,例如dev:
git checkout -b dev
也可以用一下兩條命令創(chuàng)建:
git branch dev,創(chuàng)建dev分支
git checkout dev,切換到dev分支
列出當(dāng)前分支:
git branch
合并分支:
git merge dev,操作前提是已經(jīng)處于master分支狀態(tài)
合并完成后,就可以放心的刪除dev分支了:
git branch -d dev
察看git分支合并圖:
git lob --graph
正常的合并是fast forward模式,當(dāng)然也可以禁用:
git merge --no-ff -m "merge with no-ff" dev
首先,master分支應(yīng)該是非常穩(wěn)定的,也就是用來(lái)發(fā)布新版本,平時(shí)不用在上面干活。干活都在dev分支上,也就是說(shuō),你和你的小伙伴們每個(gè)人都在dev分支上干活,每個(gè)人都有自己的分支,是不是的往dev分支上合并就可以了。
bug分支:
假如這種情況,你正在dev分支下寫(xiě)代碼,但還沒(méi)寫(xiě)完,又不能提交,而此時(shí)接到一個(gè)緊急處理bug的緊急任務(wù),且該人物來(lái)源于master分支。可以先用git stash將當(dāng)前工作現(xiàn)場(chǎng)儲(chǔ)存起來(lái)。
bug解決完了,再回到dev分支,如何恢復(fù)現(xiàn)場(chǎng)?
1:git stash apply,恢復(fù)后,stash不刪除,需要調(diào)用git stash drop
2: git stash pop,恢復(fù)同時(shí)把stash內(nèi)容也刪除。
feature分支:
開(kāi)發(fā)過(guò)程中,有無(wú)窮無(wú)盡的新功能添加進(jìn)來(lái),但你不希望一些實(shí)驗(yàn)性質(zhì)的代碼把主分支搞亂了,所以,每添加一個(gè)新功能,最好新建一個(gè)feature分支,在上面開(kāi)發(fā)。
git checkout -b feature
開(kāi)發(fā)完成后,切回dev,準(zhǔn)備合并
git checkout dev
但是!突然該功能要求取消,必須銷(xiāo)毀這個(gè)分支:
git branch -d feature,正常的話會(huì)提示銷(xiāo)毀失敗,因?yàn)檫€未合并,所以就來(lái)了下面的命令:
git branch -D feature,強(qiáng)制刪除一個(gè)分支
多人寫(xiě)作:
察看遠(yuǎn)程庫(kù)信息:
git remote
加-v可以察看更詳細(xì)的信息:
git remote -v
推送分支:
git push origin master
git push origin dev
你的小伙伴想在dev分支下開(kāi)發(fā),就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地:
git checkout -b dev origin/dev
多人寫(xiě)作工作模式通常如下:
1、首先,試圖用git push origin branch-name推送自己的修改
2、如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新,需要先用git pull試圖合并
3、如果合并有沖突,則解決沖突,并在本地提交
4、沒(méi)有沖突或者解決沖突后,在用git push origin branch-name推送就能成功
5、如果git pull提示“no tracking infor...”,說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建,用命令git branch --set-upstream branch-name origin/branch-name
標(biāo)簽管理:
發(fā)布一個(gè)新版本時(shí),通常大一個(gè)標(biāo)簽。這個(gè)標(biāo)簽唯一確定了打標(biāo)簽時(shí)刻的版本。標(biāo)簽也是版本庫(kù)的一個(gè)快照。
git tag xxx
察看所有標(biāo)簽:
git tag
給歷史某次提交的commit id打標(biāo)簽:
git tag vx.x xxxxxxx
創(chuàng)建帶說(shuō)明的標(biāo)簽:
git tag -a vx.x -m "tags shuoming" xxxxxxx
打錯(cuò)了標(biāo)簽,也可以刪除:
git tag -d Vx.x
推送某個(gè)標(biāo)簽到遠(yuǎn)程:
git push origin vx.x
一次性推送所有未推送的標(biāo)簽到遠(yuǎn)程:
git push origin --tags
刪除遠(yuǎn)程標(biāo)簽(需先刪除本地標(biāo)簽):
git tag -d v0.9
git push origin :refs/tags/v0.9
讓git顯示顏色:
git config --global color.ui true
git可以忽略特殊文件,所有配置文件在:
https://github.com/github/gitignore
.gitignore文件本身也需要放到版本庫(kù)里
最后說(shuō)說(shuō)搭建git服務(wù)器:
1、ubuntu或debian及其,安裝git
sudo apt-get install git
2、創(chuàng)建一個(gè)git用戶,用來(lái)運(yùn)行g(shù)it服務(wù)
sudo adduser git
3、創(chuàng)建證書(shū)登陸:
收集所有需要登陸的用戶的公匙,把所有公匙導(dǎo)入到home/git/.ssh/authorized_keys文件里,易行一個(gè)。
4、初始化git倉(cāng)庫(kù):
sudo git init --bare sample.git
5、把owner改為git:
sudo chown -R git:git sample.git
6、禁用shell登陸:編輯etc/passwd
git:x:1001:1001:,,,:/home/git:/bin/bash
改為
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell