总结一下git的命令和个人理解
##安装git
Windows上安装git
可以从git官网下载安装,一直默认即可。
在开始菜单中找到Git Bash 点击后会出现命令行窗体(可以看到版本号)
安装完成后进行配置,命令行输入:
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
##说一下git clone
git clone支持https和git(即ssh)两种方式下载源码:
当使用git方式下载时,如果没有配置过ssh key,则会有如下错误提示:
介绍一下如何配置git的ssh key
首先检查一下刚刚的用户名邮箱:
然后执行以下命令生成秘钥:
点击回车需要几步操作:
1.确认秘钥的保存路径(如果不需要改路径则直接回车);
2.如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);
3.创建密码(如果不需要密码则直接回车);
4.确认密码;
在指定路径下会有id_rsa和id_rsa.pub两个文件
打开你的github点击头像->settings左侧列表的SSH and GPG keys 点击绿色的New SSH key
然后用文本工具打开之前生成的id_rsa.pub文件,把内容拷贝到key下面的输入框,并为这个key定义一个名称(通常用来区分不同主机),然后保存:
尝试用git方式下载,可以看到已经可以正常下载:
以上几步完成以后此时你就和git有了一对一联系,上传下载就如同有了令牌一样
git的基本命令
git是什么
git是一种版本控制器. 更直白说,团队开发时,管理代码用的软件.
说一下安装
Window环境:
到 https://git-for-windows.github.io/ 下载软件, 双击,一路”Next”,安装完毕. 到开始菜单找”git bash”,如下图
Linux环境安装git:
centos,redhat系统
代码管理
创建版本库
|
|
注意:
不要把仓库建在中文目录下,可能出问题.
.git是个隐藏目录,不要乱碰.(你的每一次代码修改它都帮你记录着呢)
添加文件
在刚刚创建的test目下创建一个index.php如图:
查看仓库状态
可见,此时git发现有一个新文件,但并没有把此文件纳入管理. 我们需要两步,让git仓库管理index.php
git add index.php
把index.php提交到暂存区
git commit -m “新建index.php”
把index.php提交到版本库
修改文件
修改后的文件需要重新提交到暂存区然后到版本库
删除文件
用rm命令删除文件,并直接commit,提交到版本库
例:先创建一个foo.php,供练习删除用
远程仓库
经过前面的练习,你在本地的仓库里管理代码已经比较熟练了.
但如果是团队开发,如何配合起来呢?
我们可以把版本仓库放在互联网上. 开发者把自己最新的版本推到线上仓库, 同时,把线上仓库的最新代码,拉到自己本地. 这样,就可以配合工作了.
注册git在线仓库的账号
国外: http://www.github.com
国内: http://git.oschina.net
创建项目
注册后,”新建项目”,我们先建一个测试项目
为此项目提供的仓库地址有2个.
http地址:https://github.com/876205350/lianxi.git
ssh地址: git@github.com:876205350/lianxi.git
前面因为ssh key已经配好使用ssh更方便不过下面我们依然使用http地址
把代码推送到远程仓库
为本地库添加远程库
$ git remote add origin https://github.com/876205350/lianxi.git
意思是:添加1个远程库,代号是origin,地址是 https://....lianxi.git
push 推代码
$git push -u origin master 意思是,把本地的版本(默认是master),推到代号为origin的远程库去.
这个过程会弹出github登录框,让你输入用户名/密码
以后再使用http就不用输入账号密码
代码管理
学习git,你必须要了解3个重要区域.
工作区, 即开发者的工作目录.
暂存区, 修改已被记录,但尚未录入版本库的区域.
版本库, 存储变化日志及版本信息.
工作区->add->到暂存区->commit->仓库
文件操作
添加多个文件
git add
git add *.txt #添加当前目录下的.txt文档
git add . #添加当前目录的所有变化
删除文件
git rm
移动或改名
git mv 源文件 新文件
例
移动:git mv config.php ./inc/config.php
改名:git mv config.php config.inc.php
改动日志
每个文件/目录发生的版本变化,我们都可以追溯.
命令为:”git log “
常用格式: git log 查看项目的日志
git log
git log . 查看本目录的日志
例: git log 显示如下:
如果感觉log有点乱,可以git log –pretty=oneline,让日志单行显示.
切换版本
git reflog 查看版本变化
HEAD指向当前版本5d5df86,
切换为head的前1版本,git reset –hard HEAD^
切换为head的前2版本,git reset –hard HEAD^^
切换为head的前100版本,git reset –hard HEAD~100
实例:
也可以利用版本号来切换,例
分支管理
分支有什么用?
在开发中,遇到这样的情况怎么办?
网站已有支付宝在线支付功能,要添加”微信支付”.
修改了3个文件, wechat.php,pay.php
刚做到一半,突然有个紧急bug: 支付宝支付后不能修改订单状态.
你需要立即马上修改这个bug,需要修改的文件是,ali.php,pay.php.
问题是:pay.php,已经被你修改过,而且尚未完成.
直接在此基础上改,肯定有问题.
把pay.php倒回去? 那我之前的工作白费了.
此时你肯定会想: 在做”微信支付”时,能否把仓库复制一份,在此副本上修改,不影响原仓库的内容.修改完毕后,再把副本上的修改合并过去.
好的,这时你已经有了分支的思想.
前面见过的master,即是代码的主干分支,
事实上,在实际的开发中,往往不会直接修改和提交到master分支上.
而是创建一个dev分支,在dev分支上,修改测试,没问题了,再把dev分支合并到master上.
如果有了分支,刚才的难题就好解决了,如下图:
在做”微信支付”时,我们创建一个wechat分支.
把wechat分支commit,此时,master分支内容不会变,因为分支不同.
当遇到紧急bug时,创建一个AliBug分支.
修复bug后,把AliBug分支合并到master分支上.
再次从容切换到wechat分支上,接着开发”微信支付”功能,开发完毕后,
把wechat分支合并到master分支上.
查看分支
查看所有分支git branch
列
创建分支
创建dev分支 git branch dev
切换分支
切换到dev分支 git checkout dev
再次查看
合并分支
当我们在dev上开发某功能,并测试通过后,可以把dev的内容合并到master分支.
例:
当前的readme.txt 内容为”so so”,在dev分支下,添加一行”from dev”
并提交
再次切换到master,查看readme.txt的内容,仍为’so so’
合并dev分支,git merge dev, 如下:
再次查看readme.txt的内容,已变为”soso from dev”;
删除分支
|
|
快速创建和切换分支 快速创建和切换分支
git checkout -b dev # 创建dev分支并立即切换到dev分支
即起到git branch dev和git checkout dev的共同作用.
远程仓库
查看远程仓库
查看远程仓库:git remote
查看仓库地址:git remote -v
例:
删除远程库
命令:git remote remove <远程库名>
示例:git remote remove origin
添加远程库
命令:git remote add <远程库名> <远程库地址> 示例:
注: 远程库名一般叫origin,但并非强制,你可以自己起名.
例:
git remote add online https://github.com/876205350/lianxi.git
修改远程库名称
git remote rename <旧名称> <新名称>
例:
git remote rename online oschina
公钥登陆
配置请看 ssh key配置
配置ssh格式的远程仓库地址
git remote add origin git@github.com:876205350/lianxi.git
push本地仓库到远程,发现不用填密码了
git push -u origin master