公司一直在使用svn進(jìn)行開發(fā),今天得閑又看了看Git管理代碼的常用操作,總結(jié)一下昭灵。
Git安裝
- 查看是否安裝了git
$ git
-
homebrew
安裝
$ brew install git
- 安裝完成后設(shè)置用戶名和郵箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
創(chuàng)建版本庫
- 創(chuàng)建文件夾(有項(xiàng)目文件夾略過),
pwd
顯示當(dāng)前目錄
$ mkdir "documentName"
$ cd "documentName"
$ pwd
-
git init
將當(dāng)前目錄變成Git可以管理的倉庫
$ git init
- 創(chuàng)建文件养篓,并添加到倉庫緩存區(qū)。
add
僅僅是添加到一個緩存區(qū)赂蕴,并沒有真正存到倉庫里
$ touch "filename"
$ git add "filename"
- 提交文件到倉庫
-m
是提交說明
$ commit -m "add a new file"
注:commit
之前可以add
多個文件,最后一起提交
倉庫管理指令
-
status
查看倉庫狀態(tài):比如說是否有文件修改柳弄、是否add了等等。建議每次提交之前都查看一下倉庫狀態(tài)概说。
$ git status
- 查看文件修改內(nèi)容
$ git diff "filename"
- 查看版本提交歷史記錄
$ git log
也可以
$ git log --pretty=oneline
- 版本退回
$ git reset --hard HEAD^ //退回上個版本
$ git reset --hard HEAD^^ //退回上上個版本
$ git reset --hard HEAD~n //退回上n個版本
$ git reset --hard 3628164 //退回`commit id`為3628164的版本碧注,`git log`可以查看到`commit id`
- 查看文件內(nèi)容
$cat "filename"
- 撤銷工作區(qū)的修改,即撤銷你在上次
add
或commit
之后對文件的改動糖赔。
$ git checkout -- "filename"
- 撤銷已經(jīng)在緩存區(qū)的修改萍丐,即撤銷你在上次
add
之后對文件的改動。
$ git reset HEAD "filename"
換句話來解釋上面的兩個撤銷操作:如果是撤銷到add
之前的修改用reset
放典,還要撤銷這個修改逝变,就再使用checkout
。
- 刪除文件
在本地文件夾刪除
$ rm "filename"
從倉庫刪除文件
$ git rm "fliename"
$ git commit -m "remove filename"
如果是本地誤刪了文件奋构,可以重新checkout恢復(fù)壳影,前提是沒有從倉庫刪除該文件。
$ git checkout -- "filename"
遠(yuǎn)程倉庫操作
- 本地Git倉庫和GitHub倉庫關(guān)聯(lián)
如果是公司需要可以自己搭建Git服務(wù)器声怔,這里僅記錄一下和github網(wǎng)站關(guān)聯(lián)
1,創(chuàng)建SSH Key舱呻。查看用戶/用戶名/.ssh
是否存在(一般mac是這個路徑)醋火,如果有悠汽,再看看這個目錄下有沒有id_rsa
和id_rsa.pub
這兩個文件,如果已經(jīng)有了芥驳,可直接跳到下一步柿冲。如果沒有,打開Shell兆旬,創(chuàng)建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com" //這個郵箱是你本地git設(shè)置的郵箱
2假抄,登陸GitHub,打開“Account settings”丽猬,“SSH Keys”頁面把 id_rsa.pub
的內(nèi)容粘貼到key
里宿饱。
3,在github上 “Create repository”脚祟,就是創(chuàng)建了一個遠(yuǎn)程空倉庫谬以,現(xiàn)在可以把這個倉庫clone
下倆,然后添加你已經(jīng)存在的項(xiàng)目由桌,也可以將本地倉庫與之關(guān)聯(lián)为黎,然后push
項(xiàng)目文件。
我以test
倉庫為例行您,我本地git init
了一個test
倉庫,在github上創(chuàng)建了一個test
遠(yuǎn)程倉庫铭乾,不同名也無所謂,不亂就行娃循。在本地test
倉庫下執(zhí)行下面命令進(jìn)行關(guān)聯(lián):
$ git remote add origin git@github.com:your_github_name/test.git
origin
就是git默認(rèn)的遠(yuǎn)程庫別名炕檩,你也可以通過下面命令進(jìn)行修改:
$git remote rename origin mynewalias
- 拉取遠(yuǎn)程倉庫代碼到本地:
$ git pull -u origin master
- 推送本地倉庫內(nèi)容到遠(yuǎn)程倉庫:
$ git push -u origin master
注:如果你的id_rsa添加了密碼,這步會讓你輸入密碼淮野;-u
是第一次推送時需要添加的捧书,會同步本地master分支和遠(yuǎn)程master分支。
-
clone
遠(yuǎn)程倉庫到本地
$ git clone git@github.com:your_github_name/test.git
分支管理
以dev
為分支名舉例
- 創(chuàng)建并切換分支
$ git checkout -b dev
或者:
$ git branch dev // 新建dev分支
$ git checkout dev //切換到dev分支
- 查看分支:*代表當(dāng)前所處分支
$ git branch
* dev
master
- 合并分支到當(dāng)前分支
$ git merge dev
- 刪除分支
$ git branch -d dev
- 解決分支沖突
存在沖突時骤星,分支合并會失敗经瓷,并顯示沖突的文件有哪些。打開沖突文件洞难,可以看見Git用<<<<<<<
舆吮,=======
,>>>>>>>
標(biāo)記出不同分支的內(nèi)容队贱,我們打開文件并保留需要的修改色冀,刪除git標(biāo)記后保存,再重新提交即可:
$ git add configfile
$ git commit -m "conflict fixed"
- 查看分支合并圖:
$ git log --graph --pretty=oneline --abbrev-commit
- 禁用
Fast forward
模式
Fast forward
模式是默認(rèn)的柱嫌,刪除分之后會丟失分支信息锋恬。
合并時禁用Fast forward
模式:
$ git merge --no-ff -m "merge with no-ff" dev
- 存儲臨時工作現(xiàn)場:目的是突然需要打斷當(dāng)前工作時,去干另一件事的時候(比如解決bug去了)编丘,而當(dāng)前工作又不能先提交時与学,可以臨時存起來
$ git status
恢復(fù)當(dāng)前工作:
$ git checkout dev //先切換到當(dāng)時工作的分支
$ git stash list // 查看臨時保存的工作的位置
$ git stash apply // 恢復(fù)當(dāng)時的工作
$ git stash drop // 刪除臨時保存位置的工作彤悔,不需要了就要把地方空出來。
apply
和 drop
也可以合并為pop
:
$git stash pop
標(biāo)簽管理
給版本添加標(biāo)簽索守,方便查看歷史版本晕窑。tag最好比commitid和-m說明更直觀
- 創(chuàng)建標(biāo)簽: v1.0為 tag_name
$ git tag v1.0
- 查看所有標(biāo)簽
$ git tag
- 給指定commit id 打上標(biāo)簽
$ git tag <tagname> <commit id>
- 查看指定標(biāo)簽信息
$ git show <tagname>
- 創(chuàng)建帶說明的標(biāo)簽名
$ git tag -a v0.1 -m "version 0.1 released" 3628164
- 刪除標(biāo)簽
$ git tag -d v0.1
- 將標(biāo)簽推送到遠(yuǎn)程
$ git push origin v1.0
或者推送全部
$ git push origin --tags
- 從遠(yuǎn)程刪除標(biāo)簽:先從本地刪除,然后再推送刪除指令
$ git tag -d v0.1
$ git push origin :refs/tags/v0.1
日常使用的命令差不多就這些吧卵佛,關(guān)于自己搭建遠(yuǎn)程Git服務(wù)器和自定義git配置杨赤、甚至git更多高級操作指令,以后有時間再補(bǔ)上吧截汪。