Git:用于本地管理仓库的软件
GitHub:一个面向开源及私有软件项目的托管平台,只支持git 作为唯一的版本库格式进行托管。
安装:采用官网地址安装
环境配置:添加路径到path环境变量中 安装路径/Git/bin (该路径下须有git.exe即为正确)
SSH KEY公钥生成:
$ cd ~/.ssh 或 cd .ssh //检查本机是否有ssh key设置
$ cd ~ //切换当前目录 保证当前路径在 “~” 下
$ ssh-keygen -t rsa -C "xxx@qq.com" //填写邮箱
进入.ssh/目录下,打开id_rsa.pub文件,全选复制公钥内容
登录GitHub系统,添加ssh key:
头像->Settings->SSH and GPG keys->New SSH key
粘贴公钥内容,点击Add SSH key完成公钥。本地仓库关联远程库时,需要验证SSH key。
注:Git使用SSH连接,SSH连接在第一次验证GitHub服务器的Key时,需要确认GitHub的key的指纹信息是否真的来自GitHub的服务器。输入yes将GitHub的key添加到本机的信任列表中。
首先选择本地目录生成仓库:$ git init
设定该仓库账户身份:$ git config --global user.email "you@example.com" $ git config --global user.name "Your Name"
关联远程库:$ git remote add origin git@github.com:CounterName/ProjectName.git 默认GitHub账户和SSH Key已配置好(git remote rm origin 取消远程库的关联)
git add -A 添加所有改变的文件 git add . 添加新文件和编辑过的文件不包括删除的文件 git add -u 添加编辑或删除的文件,不包括新添加的文件
$ git branch -r 查看远程仓库的所有分支
$ git clone origin git@github.com:xxx/sss.git gitfile 在当前目录下 创建gitfile 克隆远程仓库到该文件夹下 注意其已经建立了本地分支与远程库的联系
Git命令示例:
$ mkdir learngit //在当前目录下创建文件夹
$ cd learngit //进入当前目录下的learngit文件夹
$ pwd //显示当前目录路径
$ git init //将当前目录(文件夹)初始化为新仓库(路径)
$ git clone git://github.com/name/test.git //克隆该url的test.git仓库 会拉取项目历史的所有数据(每个文件的每个版本)
$ git clone git://github.com/name/test.git mytest //在当前目录下创建mytest目录,用于保存克隆的数据
$ git config --global user.name "name" //配置个人信息 --global 表示以后所有项目都默认使用这里的配置信息 去掉--global 表示 新的设定保存在当前项目的.git/config文件里
$ git config --global user.email "1@qq.com" // Git为每一个提交都记录你的名字与电子邮箱,所以提交前需要配置个人信息
$ git config --list //查看自己电脑的git的全局配置
$ git add read.txt //添加文件到仓库暂存区
$ git commit -m "note information" //提交暂存区所有文件到仓库分支
$ git log --pretty=oneline //显示提交的日志记录
$ git log --name-status //显示每次提交对应的文件改动
$ git log --author yourname //可控选项 筛选出某个人的改动日志
$ git log -p filePath //可控选项 筛选出某个文件的改动日志
$ git log --grep keywords //可控选项 从提交的关键字中抓取匹配的commit项
$ git blame filePath //显示某个文件的每行信息的改动日志,查找出该行修改的作者 提交日期等
$ git reset --hard HEAD^^ //回退版本 HEAD代表当前版本 ^代表上个版本 HEAD~10 代表上10个版本 --hard 323523523.. 回退版本号前缀为323523523
$ git reflog //查看命令历史记录
$ git status //查看状态(暂存区、版本库)
$ git checkout -- file //回退文件状态(上一次git add或git commit时的状态)
$ git rm readme.txt //删除文件(需要commit 同步到版本库)
$ git echo ‘runoob.com’ > test.txt //创建或覆盖文件内容
$ git remote add origin git@github.com:gitname/Unity.git //gitname账户名 关联远程库(关联需要远程库具备本地SSH Key公钥)
远程库的别名[alias]就是origin
,这是Git默认的叫法,也可以改成别的,但是origin
这个名字一看就知道是远程库。可以添加多个远程库
$ git rm <file> 仅删除工作目录中的文件
$ git rm -f <file> 强制删除 可以删除之前修改过且放到暂存区域的文件
$ git rm --cached <file> 把文件从暂存区域移除,但工作区仍保留
重点:分支管理
$ git remote //查看远程仓库 添加 -v 参数查看别名的实际链接地址
$ git branch //列出分支
$ git branch (branceName) //创建分支
$ git branch -d (branceName) //删除分支
$ git remote rm [alias] //删除远程仓库
$ git checkout (branceName) //切换分支
$ git checkout -b newtest //创建新分支且切换到该分支
$ git merge newtest //合并分支到主分支 合并冲突需要手动修改并添加、提交
$ git diff //查看git status的详细信息 显示区别--已写入缓存与已修改但尚未写入缓存的改动
提取远程仓库的更新:git fetch 、git merge
$ git fetch [alias] //从远程库下载新分支与数据 需要git merge远程分支到你所在的分支
$ git merge [alias]/[branch] //从远程库提取数据幷尝试合并到当前分支
注:merge后一个参数,表示合并到本地主分支,其使用Fast forward模式,该模式下,删除分支后,会丢掉分支信息
添加--no-ff参数会强制禁用该模式,同时merge时会生成一个新的commit(保存分支信息),为此需要-m为commit添加注释
示例:$ git merge --no-ff -m "merge with no-ff" dev
推送到远程仓库:
$ git push [alias][branch] 将你的[branch]分支推送成为[alias]远程仓库上的[branch]分支
$ git push -u origin master //推送分支 master 到远程库 origin 名字都可以变化 -u 代表将分支与远程库关联 简化命令
Bug分支:
每一个bug都可以通过一个新的临时分支来修复,修复后合并分支幷删除临时分支。
若当前分支上的任务未完成,现需要紧急新建Bug分支。此时需要保存当前工作现场,从其它分支中新建Bug分支
$ git stash 保存当前工作现场 就可以切换到其他分支上了
$ git stash list 回到原先分支上 查看工作现场
$ git stash apply 恢复工作现场
错误描述:git push origin master后报错failed to push some refs to ...
原因:远程库有本地库未拉取的文件(常见README.md未同步)
方法:git pull --rebase origin master
$ git commit --amend 修改最后一次提交的注释信息
扩展:
创建 .gitignore 文件忽略跟踪某些文件
# 此为注释
#忽视所有.a结尾的文件
*.a
#但除 lib.a 之外
!lib.a
# 忽略根目录下的todo.xx文件
/todo.xx
# 忽略目录下所有文件
NewFiler/
# 忽略目录下指定的文件 不忽视子文件夹下的
doc/*.txt
# 忽视目录下所有指定的文件 包含子文件下符合条件的
doc/**/*.txt
# **\通配符
通常情况下是 使用vim .gitignore 修改文件
vim 命令: i键进入插入模式、esc键退出插入模式、键入":wq"推出并保存修改
修改.gitignore文件是不会立即生效的。使用以下命令立即生效
git rm -r --cached . #清除缓存 注意命令最后有一个点号 代表文件目录
git add . #重新trace file 注意命令最后有一个点号 代表文件目录
git commit -m "update .gitignore" #提交和注视
git push origin master #可选,同步到远程分支上