基礎(chǔ)操作
0、本地安裝git ---Mac中自帶有g(shù)it崭篡,所以不用自己安裝
1、設(shè)置git的名字和郵箱(配置git的參數(shù))
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
# 這里設(shè)置的姓名和郵箱是在提交的時候用到的,是公開
3响蓉、去 githun官網(wǎng) 中注冊github賬號
4、要是自己本地的能夠方便的鏈接github的代碼庫哨毁,需要進(jìn)行SSH認(rèn)證枫甲,
- 首先獲取SSHKey
$ ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
郵箱處輸入創(chuàng)建github賬號的郵箱,敲回車會出現(xiàn)下面的文字
# Generating public/private rsa key pair...
# Enter file in which to save the key(/Users/bihairui/.ssh/id_rsa): (這里敲回車)
如果之前已經(jīng)獲取過扼褪,會出現(xiàn)下面的
# /Users/bihairui/.ssh/id_rsa already exists.
# Overwrite (y/n)? y
# 已經(jīng)存在想幻,問是否重寫,輸入"y"话浇,按回車
在下面輸入兩次相同的密碼就可以
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
- 查看你的public key
$ cat ~/.ssh/id_rsa.pub
# (這個就是public key)ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
添加 ssh 到github中
id_rsa.pub 中的所有內(nèi)容脏毯,粘貼到下面網(wǎng)址的 key 框中。title自定
添加SSH測試是否認(rèn)證成功
$ ssh -T git@github.com
# 出現(xiàn)下面提示就是成功了
# Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
這樣就添加好了SSH認(rèn)證凳枝,以后用認(rèn)證過的電腦就可以push文件到github中了
常用命令
git 創(chuàng)建
要使用git抄沮,首先要在需要git管理的目錄下創(chuàng)建git倉庫
$ git init
# Initialized empty Git repository in .....
查看git狀態(tài)
$ git status
$ git status -s #git狀態(tài)的簡短輸出命令
幾種狀態(tài)介紹
1跋核、剛剛commit后的狀態(tài)
# On branch master
# nothing to commit, working directory clean
2、在目錄新添加了文件叛买,還沒有add
# On branch master
# Initial commit
#Untracked files:
# (use "git add <file>..." to include in what will be committed)
# nothing added to commit but untracked files present (use "git add" to track)
3砂代、執(zhí)行g(shù)it add . 后
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
4、我們看到當(dāng)執(zhí)行 git add .命令后率挣,在查看狀態(tài)會有一個提示命令
$ git reset HEAD <file>
# 這個命令就是撤銷暫存某個文件刻伊,<file>替換成文件名就可以了
添加到暫存區(qū)
$ git add . # (注意后面的 空格 + . )
# 如果需要添加單一的文件
$ git add readme.md
保存到本地倉庫,并記錄提交
$ git commit -m "message"
# message
# 156 files changed, 7809 insertions(+)
添加暫存椒功,提交一起完成
如果只是對之前的文件進(jìn)行修改捶箱,并沒有添加新的,可以直接用
$ git commit -a -m "message"
這一條命令代替 git add . 和 git commit -m "message"
如果有新文件添加动漾,就不能這樣用了
查看提交日志
$ git log
# commit c9e7440600a12b48a8bc04fce401ea1937065bcb(哈希值)
# Author: xxxx <xxxx@163.com>
# Date: Mon Nov 23 21:39:48 2015 +0800
# First commit (這個是提交的message)
# 按回車能夠打印更多l(xiāng)og
# 按q丁屎,退出狀態(tài)
$ git log --oneline # 簡短日志
# ad43a3d hahaha
# 5dd8db2 hahah
# 14153a2 hahaha
$ git log --oneline --graph
# 查看什么時候出現(xiàn)過分支
$ git log --pretty=short
# 執(zhí)行此語句,會打印簡單日志
$ git reflog
# 當(dāng)reset到之前的一個狀態(tài)旱眯,git log只能打印以此處為終點的日志
# git reflog 能打印所有的操作日志
# 只要不進(jìn)行 git 的 GC(Garbage Collection 垃圾回收)晨川,就能恢復(fù)到任意狀態(tài)
$ git log --decorate
# 這個命令能夠打印出帶有標(biāo)簽的日志
查看更改前后的差別
$ git diff (只有在修改文件,但是還沒有add的時候删豺,才有作用)
# git diff 是區(qū)分本地工作庫和暫存區(qū)的文件不同
$ git diff HEAD #查看工作樹和最新狀態(tài)的區(qū)別
好建議:在 git commit 之前先執(zhí)行以下 git diff HEAD 查看以下有什么區(qū)別
移除git控制的文件
$ git rm
# git rm 刪除本地的文件和版本庫的文件
添加標(biāo)簽
$ git tag -a "1.1.0" -m "This is a tag"
# 添加版本和描述的標(biāo)簽
$ git log --decorate
# 這個命令能夠打印出帶有標(biāo)簽的日志
$ git tag
# 列出所有tag
$ git tag [tag]
# 新建一個tag在當(dāng)前commit
$ git tag [tag] [commit]
# 新建一個tag在指定commit
$ git show [tag]
# 查看tag信息
$ git push [remote] [tag]
# 提交指定tag
$ git push [remote] --tags
# 提交所有tag
$ git checkout -b [branch] [tag]
# 新建一個分支共虑,指向某個tag
分支的操作
因為 git 是分散式的,開發(fā)過程中會有過個分支呀页。在這類的開發(fā)中妈拌,往往同時存在多個最新代碼狀態(tài)。從master分支中創(chuàng)建多個其他分支蓬蝶,進(jìn)行開發(fā)尘分。master是git默認(rèn)的分支,基本上所有的開發(fā)都是一個這個分支為中心進(jìn)行開發(fā)的疾党。
不同分支可以完成不同的作業(yè)音诫,完成以后再和master分支合并惨奕,利用分支可以提高開發(fā)效率
特性分支
顧名思義雪位,是集中實現(xiàn)單一特性(主題),除此之外不進(jìn)行任何作業(yè)的分支梨撞,在日常開發(fā)中雹洗,往往會創(chuàng)建數(shù)個特性分支,同時在此之外卧波,在保留一個隨時可以發(fā)布軟件的穩(wěn)定分支时肿,穩(wěn)定分支的角色通常由mastre分支擔(dān)任。
我們之前創(chuàng)建了feature-A分支港粱,這一分支主要實現(xiàn)feature-A 螃成,除feature-A的功能之外旦签,不進(jìn)行任何作業(yè)。即使開發(fā)中發(fā)現(xiàn)bug寸宏,也需要再創(chuàng)建新分支宁炫,在新分支中修正。
完成feature-A的功能以后氮凝,在合并到master分支中
查看分支狀態(tài)
$ git branch
# * master 只有master一個分支
創(chuàng)建分支羔巢,并轉(zhuǎn)到分支
$ git branch 分支名字 #創(chuàng)建分支
$ git checkout 分支名字 #切換到分支
$ git checkout master #切換到master分支
一句話搞定上面兩個命令
$ git checkout -b 分支名稱 # 創(chuàng)建b分支,并切換到b
當(dāng)切換到其他分支的時候罩阵,所有的 add commit 操作都是在這個分支里進(jìn)行的竿秆。當(dāng)前的文件也是在次分支的狀態(tài)。這個時候如果切換到master分支稿壁,在master分支中修改文件幽钢,在feature-A 分支文件中是看不到的。但是需要注意的時傅是,有可能會產(chǎn)生沖突搅吁。
切換到上一分支(快速切換)
$ git check -
合并分支
一般合并分支,首先要切換到master分支落午,然后在master分支中合并想要合并的分支
$ git merge --no-ff feature-A
# --no-ff:不使用fast-forward方式合并谎懦,保留分支的commit歷史
# --squash:使用squash方式合并,把多次分支commit歷史壓縮為一次
合并的時候如果出現(xiàn)沖突溃斋,就解決沖突界拦。刪除==== >>>>>>>> <<<<<<<
這樣的標(biāo)記,然后執(zhí)行 git add .
和 git commit
就可以了梗劫。
更改提交操作
回滾歷史版本
$ git reset --hard 哈希值(前七位即可)
# 哈希值可以用個git log 和 git reflog獲取
修改上一個提交信息
$ git commit --amend
書的58-63頁享甸,后面的目前還不知道什么時候使用,暫且不看梳侨,等以后用到再看蛉威,暫且?guī)紫?br> git rebase -i 壓縮歷史
推送到遠(yuǎn)程倉庫
上面所有的操作都是在本地倉庫中進(jìn)行的操作
接下來擴(kuò)展到遠(yuǎn)程倉庫
- 首先在github中 新創(chuàng)建 一個倉庫。然后拿到倉庫的地址
- 通過該地址走哺,為本地倉庫添加遠(yuǎn)程倉庫
查看遠(yuǎn)程倉庫
$ git remote
# 查看遠(yuǎn)程倉庫
# origin
$ git remote -v
# 查看所有遠(yuǎn)程倉庫
# origin git@github.com:github/git-reference.git (fetch)
# origin git@github.com:github/git-reference.git (push)
添加遠(yuǎn)程倉庫
$ git remote add origin 遠(yuǎn)程倉庫地址
移除遠(yuǎn)程倉庫
$ git remote rm origin
推送至遠(yuǎn)程倉庫
$ git push -u origin master # 推送主分支
$ git push -u origin feature-A # 推送feature-A分支到同一個倉庫
推送遠(yuǎn)程倉庫以后蚯嫌,在提交新的代碼皆可以直接使用
$ git push
從倉庫中獲取
$ git clone 倉庫地址
$ git pull 從倉庫中拿到最新的代碼
修改遠(yuǎn)程地址
$ git clone 倉庫地址
$ git pull 從倉庫中拿到最新的代碼