在这之前我们需要先清楚
git存在两个区:①工作区:下面的gitdir即为工作区;②版本库:工作区中存在一个隐藏目录.git 即为版本库(stage为暂存区,master为分支)
add与commit 的理解:
① 使用git status可以查看工作区是否有改动;
②git add 文件名 ... 即为修改过的文件名提交到stage暂存区
③git commit -m <msg> 即将stage中的所有修改提交到master分支
# git 跟踪修改的机理,每次修改如果不用 git add 到暂存区,那就不会加入到commit中
1)创建版本库
>>mkdir gitdir
>>cd gitdir
>>git init (库创建成功的标志为在当前目录下多了一个 .git 的目录,.git不能改动,可通过ls -ah看见)
2) 修改并提交
在版本库中进行文本文件的增删改之后对改过的文本文件进行该操作(可添加一个或多个文件,用空格隔开)
~/gitdir$ git add 有变更的文本文件1 文件2 ...
~/gitdir$ git commit -m <msg> (其中 -m <msg>即在修改日志中的标记记录)
时光机穿梭(对不同版本的管理操作)
1)查看更改的版本
~/gitdir$ git log (可查看版本操作系统的日志记录中记录了我们做了哪些操作)
~/gitdir$ git log --pretty=oneline (表示更友好的展示)
2)回退操作
回退到之前的某一版本的操作(其中HEAD表示当前版本,上一个版本用HEAD^表示,上上个版本用HEAD^^,上n个版本为head~n)
示例:~/gitdir$ git reset --hard HEAD~n 注:HEAD~n为指向那个版本的指针
3)反悔操作
如果想要回到未来(退回之前的操作版本):
~/gitdir$ git --hard 未来版本的id (注:如果忘记了未来版本的id可通过~/gitdir$ git reflog来查找)
4)撤销操作的情况
① git checkout --<file名> 可以撤销仅仅是修改内容但未提交到暂存区的操作
② git reset HEAD <file名> 可以撤销将修改放入到stage区的操作变为unstage
③ 若已经提交到则可以通过修改版本来实现
④ 如果已提交到远程仓库,则无力回天(只有进入远程仓库修改)
5)删除文件操作
~/gitdir$ rm 文件名
~/gitdir$ git rm 文件名
~/gitdir$ git commit -m <注解msg>
如果删除错了,则通过撤销操作的方式来恢复
git的远程仓库:github
step1:创建ssh key ,先看用户主目录下有没有.ssh目录(若有且.sh中包含id_rsa(私钥) id_rsa.pub(公钥),则可以忽略此步骤)使用该命令来生成ssh_key ~/gitdir$ ssh-keygen -t rsa -C ‘邮件地址’
邮件地址需要输入自己的邮件地址,之后一路回车,使用默认值,一切顺利后会出现 .ssh目录,将里面的id_rsa.pub内容复制即可
step2:登录github,打开‘Account settings ’,‘ssh keys’页面:然后点击“add ssh key”,填上任意的title,在key文本框中粘贴id_rsa.pub文件中的内容即可
之所以需要ssh_key是因为github需要识别出你推送的,而不是别人冒充的,而git支持ssh协议,所以,github只要知道了你的公钥,就可以确定只有你自己才能推送。一个git仓库一个ssh_key
6)添加远程仓库
① 登录github,在右上角点击new repository,创建新仓库
② 将远程仓库与本地仓库关联,然后将本地仓库的内容推送到github仓库
在本地仓库运行
~/gitdir$ git remote add origin git@github.com: .git路径(origin包含ssh类和https类,https类需要密码,ssh不需要密码)
添加后远程仓库的名字就是origin(虽然也可以改成别的)
克隆仓库
如果远程仓库存在文件,则可以通过克隆仓库来实现本地仓库与远程仓库的同步:
~/gitdir$ git clone git@github.com:远程仓库的地址 [本地预克隆文件夹]
7)创建切换分支
git checkout -b dev
相当于 git branch dev # 创建dev分支
和 git checkout dev 切换至dev分支
8)对于分支的操作
git branch # 查看当前分支
git merge dev 用于合并指定分支到当前分支(即两个分支指针指向相同的版本)
git branch -d dev 删除指定分支
最后可以通过git log查看分支的合并情况
git log --graph 可以看到分支合并图
一般合并时,git会用fast forward 模式,这种模式会丢掉分支信息,如果强制禁用fast forward,git会在merge时生成一个新的commit
git merge --no-ff dev # 将dev合并到当前的分支,并强制禁用Fast forward