本文是對《GitHub入門與實(shí)踐》一本書的總結(jié)和歸納心铃,方便日后查看Git
各種命令的使用
目錄
git初始設(shè)置
git config --global user.name # 姓名
git config --global user.email # 郵箱
讓輸出命令具有更好的可讀性:
$ git config --global color.ui auto
設(shè)置SSH Key
GitHub上連接已有倉庫是通過SSH Key來進(jìn)行的笆搓,創(chuàng)建SSH Key:
$ ssh-keygen -t rsa -C
兩個重要的文件:
- id_rsa:私有密鑰
- Is_rsa.pub:公開密鑰
在GitHub中添加公開密鑰赂鲤,就可以用私有密鑰來訪問的
$ cat ~/.ssh/id_rsa.pub
完成設(shè)置之后八拱,用手中的私有密鑰與GitHub進(jìn)行通信:
$ ssh -T git@github.com
下面是實(shí)際操作部分:
創(chuàng)建倉庫
新建一個git上的换帜,見下圖楔壤,不要勾選初始化的
read.me
文件
上面的私有和公開寫反了。惯驼。蹲嚣。哈哈哈哈哈
初始化
在本地新建一個和遠(yuǎn)程倉庫同名字的本地倉庫,進(jìn)行初始化
git init # 生成.git目錄
查看狀態(tài)git status
未加入到緩存區(qū):紅色
加入到緩存區(qū):綠色
git status
緩存區(qū)git add
向緩存區(qū)添加文件祟牲。上面的栗子中有使用git add
命令隙畜。緩存區(qū)是提交前的一個臨時區(qū)域。
提交commit
提交指的是激勵工作樹中所有文件的當(dāng)前狀態(tài)说贝。通過參數(shù)m
可以加上本次的提交信息议惰。還可以修改提交信息。
git commit -m "first commit"
git commit --amend "重新提交"
添加和提交
將上面的兩個動作同時進(jìn)行的語句
git commit -am "添加和提交同時進(jìn)行"
查看日志
- 輸入
q
即可退出
git log
- 只看一行信息
- 查看指定文件乡恕、目錄的信息
在后面直接跟上文件名稱即可
如果想看到提交帶來的改動言询,加上參數(shù)-p
俯萎。
$ git log -p README.md
git reflog
查看當(dāng)前倉庫執(zhí)行過的操作日志
只要不進(jìn)行Git的GC(Garbage Collection,垃圾回收)运杭,就可以通過日志隨意調(diào)取近期的歷史狀態(tài)夫啊。
前面表示的是哈希值。哈希值只要輸入4位以上就可以執(zhí)行的
差別git diff
git diff
查看更改前后的差別
git diff head # 查看和最新提交的差別
養(yǎng)成好的習(xí)慣:在執(zhí)行g(shù)it commit命令之前辆憔,先執(zhí)行g(shù)it diff命令撇眯,查看本次提交和上次提交的差別,確認(rèn)完畢再提交
分支操作
master分支是git的主分支虱咧,其他分支都是以這個分支為中心進(jìn)行的熊榛。
顯示分支列表
git branch # 分支名列表顯示,同時顯示現(xiàn)在所處的分支
git branch -a # 同時顯示遠(yuǎn)程倉庫和本地倉庫的分支信息
當(dāng)前只有master分支腕巡,星號表示當(dāng)前所處的分支
新建分支并切換
git checkout -b feature-A # 創(chuàng)建的同時切換到分支feature-A
上面??的語句等同于:
git branch feature-A # 創(chuàng)建分支
git checkout feature-A # 切換分支
git checkout - # 短橫線表示切換到上一個分支
- 分支feature-A 的操作不會影響到主分支master
- 分支之間的操作互不影響来候,能夠同時進(jìn)行
特性分支Topic
特性分支是集中實(shí)現(xiàn)單一特性(主題),除此之外不進(jìn)行任何作業(yè)的分支逸雹。
在實(shí)際的開發(fā)中营搅,往往會創(chuàng)建多個特性分支,保留一個隨時可以發(fā)布軟件的穩(wěn)定分支梆砸。穩(wěn)定分支通常由master分支擔(dān)當(dāng)转质。
基于特定主題的作業(yè)在特定分支中進(jìn)行,主題完成后再和master分支合并
分支合并git merge
git checkout master # 先切換到主分支
git merge --no-ff feature-A # 合并分支:創(chuàng)建合并并提交帖世,記錄本次合并
圖表形式git log —graph
用圖表的形式輸出提交日志休蟹,非常直觀
git log --graph
回溯歷史版本
Git的另一個特征是可以靈活地操作歷史版本。
要讓倉庫的HEAD日矫、暫存區(qū)赂弓、當(dāng)前工作樹回溯到指定狀態(tài),需要使用git reset --hard
命令哪轿。
需要目標(biāo)時間點(diǎn)的哈希值盈魁。什么是哈希值?窃诉?杨耙?
git reset --hard 9154998...... # 恢復(fù)到該時間點(diǎn)的狀態(tài)
壓縮歷史git rebase -i
使用場景:如果發(fā)現(xiàn)已經(jīng)提交的內(nèi)容中有錯誤(拼音、內(nèi)容等小錯誤)飘痛,可以提交一個修改珊膜,將這個修改包含到前一個提交之中,壓縮成一個歷史記錄
git rebase -i HEAD~2 # 壓縮最近的兩個歷史記錄
git log --graph # 樹形查看提交日志
推動到遠(yuǎn)程倉庫
添加遠(yuǎn)程倉庫-add
Git是分散性版本管理系統(tǒng)宣脉。為了防止和其他倉庫混淆车柠,遠(yuǎn)程的倉庫名盡量保持和本地倉庫相同
創(chuàng)建遠(yuǎn)程倉庫的時候不要勾選添加初始化文件
現(xiàn)在假設(shè)有個test的本地倉庫,現(xiàn)在創(chuàng)建了一個同名的遠(yuǎn)程倉庫,將通過如下的語句將該其設(shè)置成本地倉庫的遠(yuǎn)程倉庫
git remote add origin git@github.com:username/test.git
推送到遠(yuǎn)程倉庫-push
將當(dāng)前分支下本地倉庫中的內(nèi)容推送到遠(yuǎn)程倉庫中竹祷,使用如下語句:
git push -u origin master # -u參數(shù)是指在推送的同時介蛉,將origin倉庫的master分支設(shè)置成本地倉庫當(dāng)前分支的上游
-u參數(shù)是指在推送的同時,將origin倉庫的master分支設(shè)置成本地倉庫當(dāng)前分支的上游溶褪。好處:將來能夠直接從遠(yuǎn)程倉庫拉缺揖伞:
git pull
如果不是推送到master分支,比如是feature-D
git checkout -b feature-D # 先切換到該分支
git push -u origin feature-D # 推送該分支
獲取遠(yuǎn)程倉庫
默認(rèn)處在maste分支下面
git clone "倉庫地址"
假設(shè)遠(yuǎn)程有個分支feature-A猿妈,我們想獲取該分支下的內(nèi)容:
- 在本地創(chuàng)建同名的分支
git checkout -b feature-A origin/feature-A # -b后面的feature-A 是本地的分支吹菱,和遠(yuǎn)程同名
# 修改內(nèi)容之后進(jìn)行推送
git push
獲取最新的遠(yuǎn)程
假設(shè)本地中有個分支feature-A,想把它更新到最新遠(yuǎn)程倉庫的狀態(tài)
git pull origin feature-A
hub
- 安裝
$ brew install hub
- 添加環(huán)境變量
$ echo 'export PATH=“~/bin:$PATH”'
>> ~/.bash_profile
- 重啟之后即可使用彭则。
$ hub --version # 查看版本
- 將相應(yīng)的git設(shè)置成hub的別名
$ vim /.bash_profile
# add
eval "$(hub alias -s)"