第一次尝试接触git,有一个很简单的原因。早有耳闻,借助github能搭建个人博客,恰巧我正苦苦寻觅着一个写技术博客的地方,喜欢简单,实用,能记录自己思想点滴的地方。经朋友推荐,学习廖雪峰的git教程为主。趁热打铁,简单记一下所学,加强记忆。(以Windows系统为例)
git资源:廖雪峰官方网站http://www.liaoxuefeng.com/
git简介:分布式版本控制系统
安装git: 资源下载地址:https://git-for-windows.github.io 下载完成按默认选择按钮安装
设置:本地机器需要指明自己身份(Your Name和email为github官网注册信息)
命令:$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
创建本地仓库(repository):在合适位置新建目录,进入目录,初始化即可
$ mkdir myrepo //新建目录
$ cd myrepo //进入当前目录
$ pwd //显示当前目录
/Users/michael/learngit
$ git init //初始化,建立空的仓库,供git管理
检测:当前目录多了一个.git目录成功,.git目录默认隐藏,用 $ ls -ah 命令查看
添加文件至仓库:$ git add <file> //可以反复多次使用添加多个文件
$ git commit -m "注释性文字" //提交至版本库
掌握工作区状态:$ git status //查看文件是否修改
$ git diff //查看修改内容
时光机穿梭:$ git reset --hard commit_id //重新回复到commit_id的版本
$ git log //查看历史版本commit_id
$ git reflog //查看未来版本commit_id
撤销修改:(前提必须理解工作区、暂存区、本地版本库的概念)
1.工作区被修改,还未add $ git checkout -- file
2.已经add,还未commit $ git reset HEAD file //回到步骤1,在采用步骤1方法完成撤销
3.已经commit,未提交远程库 $ git reset -- hard commit_id //版本回退到指定commit_id
删除文件:$ rm file //删除管理文件里的文件,当然也可手动删除
$ git rm file
$ git commit -m "注释性文字"//删除版本库的文件,并提交
远程仓库设置:为了让github远程库识别是本人提交的修改,所以需进行SSH密钥配置
1.创建SSH Key(如果用户主目录下存在.ssh目录,且该目录里面有id_rsa和id_pub文件则跳过步骤1)
$ ssh-keygen -t rsa -C "youremail@example.com" //是在windows下打开git bush
2.登录github官网,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,
在Key文本框里粘贴id_rsa.pub文件的内容,最后add key
添加远程库:1.登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库
2.在Repository name填入myrepo(与本地库同名),其他保持默认设置,点击“Create repository”按钮,
就成功地创建了一个新的Git仓库
将远程库与本地库关联:$ git remote add origin git@server-name:kingbosser/repo-name.git
本地库向远程推送内容:$ git push -u origin master //第一次推送master分支所有内容
$ git push origin master //后续推送master分支内容
SSH警告:第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
输入yes即可,只会出现一次
从远程库克隆到本地库:$ git clone git@github.com:kingbosser/repo-name.git //使用git协议
$ git clone https://github.com/kingbosser/repo-name.git //使用http协议
分支管理:查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
合并分支与冲突解决:
1.两种方式合并:合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,
而fast forward合并就看不出来曾经做过合并。
2.手动解决(查看文件删除错误的,保留正确的,然后再提交)
$ git log --graph //可以查看分支合并图
分支策略:在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,
再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
bug分支:修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
手头任务未完成,需要暂时停下来处理bug,就要存储保护现场,在恢复。
$ git stash //存储工作现场
$ git stash list //查看stash内容列表
$ git stash apply //恢复工作现场
$ git stash drop //删除stash内容
$ git stash pop //恢复并删除stash内容
feature分支:(每添加一个新功能,最好新建一个feature分支)
$ git branch -D <name> //强行删除分支
多人协作工作模式:
首先,可以试图用git push origin branch-name推送自己的修改;
//////////////////////////////////////////////////////////
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
//////////////////////////////////////////////////////////
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
//////////////////////////////////////////////////////////
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,
用命令git branch --set-upstream branch-name origin/branch-name。
//////////////////////////////////////////////////////////
命令行:$ git remote -v //查看远程库信息
$ git push origin branch-name //向远程库推送本地分支
$ git pull //抓取远程新提交
$ git checkout -b branch-name origin/branch-name //在本地创建和远程分支对应的分支
$ git branch --set-upstream branch-name origin/branch-name //建立本地分支和远程分支的关联
标签管理:$ git tag <name> //新建一个标签
$ git tag -a <tagname> -m "blablabla..." //指定标签信息
$ git tag -s <tagname> -m "blablabla..." //用PGP签名标签
$ git tag //查看所有标签
$ git push origin <tagname> //推送一个本地标签
$ git push origin --tags //推送全部未推送过的本地标签
$ git tag -d <tagname> //删除一个本地标签
$ git push origin :refs/tags/<tagname> //删除一个远程标签
使用github:
在GitHub上,可以任意Fork开源仓库;
自己拥有Fork后的仓库的读写权限,从自己远程仓库克隆至本地;
修改完成后提交至自己远程库;
可以推送pull request给官方仓库来贡献代码
忽略特殊文件:
1.忽略某些文件时,需要编写.gitignore;
2..gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
配置别名:
$ git config --global alias.st status //用st代替status
搭建git服务器(由于本人没有需求,所以没有学习此部分内容):请参照:廖雪峰官网http://www.liaoxuefeng.com
网友评论