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