Git学习笔记1
Git简介
- Git是一个开源的分布式版本控制系统,是 Linus Torvalds 为了帮助管理 Linux内核开发而开发的一个开放源码的版本控制软件。
- Github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开。它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
Git的安装
- 官网 https://git-scm.com/
- debain平台:sudo apt-get install git就可以直接完成Git的安装
- windows平台从官网下载git安装包安装
Git的本地使用
git init初始化命令
- 初始化当前目录为git目录
- git会自动创建一个master分支
- 初始化后会产生一个.git文件夹保存配置文件
git add [文件名]
- 将文件添加到git暂存区(stage)
- git add . 表示添加当前目录
- git add 命令可以同时提交多个文件
git commit [文件名]
- 将文件从暂存区提交到git仓库(比如master)
- git commit -m “this is a commit”
提交时需要-m命令附加此次提交的注释 - 第一次执行此命令时需要设置email及name,这些信息会保存到日志中
- 此命令仅仅添加经过git add到暂存区中的文件,如果暂存区中没有文件则无法提交
git config
- 当你安装Git后首先要做的事情是设置你的用户名和e-mail地址,每次Git提交都会使用该信息。
$ git config --global user.name "用户名"
$ git config --global user.email "用户邮箱账号"
- 查看配置
$ git config --list
git status
- 查看目前暂存区和git仓库的状态,是否已经提交暂存区而没有commit等
git checkout
- 将暂存区或者指定commit内容覆盖到工作区。
- 将提交的文件反向回滚到上一版本到本地目录(工作区),如果已经add而没有commit则会从暂存区回滚,如果已经commit则会从git仓库回滚
git log
- 显示历史commit的记录,包括commit文件的MD5值,作者信息、日期、-m参数后的注释 排列顺序从最
- 新的提交到最老的提交 git
- log --pretty=oneline 以单行的形式显示日志
版本号
- HEAD表示仓库中当前的版本号,HEAD^表示上一个版本号
git reset
- git reset --hard HEAD^ 表示将本目录(工作区)回滚到仓库中HEAD^的版本号
- git reset --hard [版本MD5值] 表示将本目录(工作区)回滚到指定MD5值的版本号
git reflog
- 查看所有的回滚记录,可以显示所有回滚文件的MD5值,包括已经回滚删除的
git rm [文件名]
- 删除暂存区中的文件
git diff
- 显示工作区和暂存区之间的差异
在GitHub创建仓库
- 创建GitHub账号
- 登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个远程仓库
设置SSH秘钥
- 创建SSH秘钥:由于使用SSH作为本地和远程仓库的通信协议,需要在本地创建SSH秘钥
$ ssh-keygen -t rsa -C "邮箱地址"
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥
- 登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH
Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
GitHub允许你添加多个Key,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
添加远程仓库
$ git remote add origin [远程仓库的地址,如git@github.com:abc/abc.git]
远程仓库的使用
- 完成以上步骤就已经将远程仓库和本地仓库进行了绑定
git push
- 将本地仓库推送到远程仓库
$ git push -u origin master
- 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
$ git push origin master
- 正常可使用此命令推送
git clone
$ git clone [版本库的网址] [本地目录名]
$ git clone git@github.com:abc/abc.git
- git支持多种协议,包括SSH或者是HTTPS协议
- 该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数
分支管理
- 分支管理用于多人协同开发
- A,B,C三人可以各自从远程仓库建立自己的分支,并各自在自己的分支上工作,互不打扰
- 当三人完成自己的工作后可以将各自的分支向master分支合并
创建与合并分支
- 在学习版本回退部分时,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。
- 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点
- 当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上
- 假如我们在dev上的工作完成了,就可以把dev合并到master上,直接把master指向dev的当前提交,就完成了合并
创建分支
$ git checkout -b dev
- 以上命令表示创建dev分支并切换到dev分支
$ git branch
- dev
master
- 用git branch命令查看当前分支
- git branch命令会列出所有分支,当前分支前面会标一个*号
- 后面所做的操作都是在dev分支上进行的
$ git checkout master
- 使用checkout命令切换到master分支上
$ git merge dev
- 将dev分支的工作成果向master分支上合并
- git merge命令用于合并指定分支到当前分支
$ git branch -d dev
- 删除dev分支