GIT简介:
- 分布式版本控制系统,区别于SVN和CVS的集中式版本控制系统
- 版本控制系统只能跟踪文本文件的改动,对于doc img等二进制文件没法跟踪文件的变化
GIT的安装配置:
- 下载安装GIT,默认进行安装就行
- 设置本地默认commit的昵称与Email(可以在指定的根目录下设置单独的Name和Email)
//设置全局默认的name和email
git config --global user.name "wangxin"
git config --global user.email "wangxinat@foxmail.com"
//在指定的根目录下设置单独的name和email
git config user.name "wangxin"
git config user.email "wangxinat163@163.com"
git config --global push.default simple(git2.0默认此)
//查看Git的配置
git config -l
//开启GIt的凭据缓存,解决频繁输入账户密码的情况(账户密码保存1小时)
git config --global credential.helper 'cache --timeout 3600'
GIT的使用:
//新建一个空的文件目录GitDemo
$ mkdir GitDemo
//设置该目录为指定的本地仓库
$ git init #创建Git仓库生成一个.git目录
//在当前目录中添加一个文本文件test.txt
//查看本地仓库的当前状态
$ git status
//在执行add之前可以查看文件改动哪些东西
$ git diff test.txt
//将需要提交的文件添加到git中,重新查看仓库的当前状态
$ git add test.txt
$ git status
//将添加的文件提交到仓库中,重新查看当前状态
$ git commit -m "提交的备注信息"
$ git status
//查看历史提交记录,查看日志过多 输入q即可退出显示
$ git log 或者 $ git log --pretty=oneline
//版本回退 HEAD当前版本,上个版本就是HEAD^,上上版本就是HEAD^^,HEAD~100
$ git reset --hard HEAD^
//版本还原
$ git reset --hard 5428910(之前版本的commit id前几位即可)
//查看历史提交/回滚命令
$ git reflog
//撤销最近一次的修改,未添加到暂存区则恢复到最新版本的,添加到暂存区则恢复到最近的一次添加
$ git checkout -- <file>
//注意:checkout不带--则是创建一个新的分支
$ git checkout -b dev//创建并切换当前分支
<-- 相当于下面语句 -->
$ git branch dev //创建分支
$ git checkout dev //切换当前分支
//查看当前分支
$ git branch
//将暂存区中的修改全部由撤销掉(unstage),重新放回工作区中
$ git reset HEAD <file>
$ git checkout <file>
//查看文件内容
$ cat <file>
//删除文件
$ git rm <file>
$ commit -m 'delete file' //提交将版本库中的文件
工作区和暂存区
- 工作区(working Directory):在电脑⾥里能看到的目录
- 版本库(Repository):工作区有⼀一个隐藏目录“.git”,这个不算工作区,⽽是Git的版本库,其中有
- 暂存区:(stage(index))
- master分支,以及指向master的指针HEAD
- 提交流程:工作区--add-->版本库中的暂存区(stage)--commit-->HEAD指向的master分支(工作区中修改的文件先添加到暂存区中再一次性提交到分支中)
远程仓库
- GitHub:Git仓库的托管服务
- 本地Git仓库和远程Git仓库(GitHub)之间通过SSH加密传输
- 创建/修改SSH Key 😒 ssh-keygen -t rsa -C "wangxinat@foxmail.com",在.ssh文件夹中id_rsa和id_rsa.pub
//查看本地的ssh密钥
$ cd ~/.ssh
$ ls
$ cat ~/.ssh/id_rsa.pub
//不存在则创建一个
$ SSH Key :$ ssh-keygen -t rsa -C "wangxinat@foxmail.com"
//在.ssh目录中有github_rsa github_rsa.pub id_rsa id_rsa.pub四个文件
//测试配置是否成功
$ ssh -T git@github.com
//查看远程仓库信息
$ git remote [-v]
- 登录GitHub在SSH Keys设置中,将生成的github_rsa.pub中的内容复制粘贴进去添加一个ssh keys
- 创建远程仓库和本地仓库关联
echo "# gitdemo" >> README.md
$ git init
$ git add README.md
$ git commit -m "first commit"
//关联远程仓库 $ git remote add origin git@server-name:path/repo-name.git
$ git remote add origin https://github.com/wangxinat/gitdemo.git
或$ git remote add origin git@github.com:wangxinat/gitdemo.git
$ git push -u origin master//第一次添上u 将远程仓库和本地仓库关联起来,之后就可以不用加了
//将远程仓库克隆一个本地仓库
$ git clone https://github.com/wangxinat/gitdemo.git
或$ git clone git@github.com:wangxinat/gitdemo.git
//合并分支到当前使用的分支
$ git merge dev
//删除分支
$ git branch -d dev
//强制删除分支
$ git branch -D dev
//查看分支
$ git branch
//查看当前全部
$ git branch -a
//常用的几种分支
master是主分支用于版本发布
dev分支用来开发测试使用
其他分支,用户成员开发使用
bug分支用于调试修复bug
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建并切换分支: git checkout -b name
合并某分支到当前分 支: git merge name
删除分支: git branch -d name
//查看分支的合并情况
$ git log --graph --pretty=oneline --abbrev-commit
//查看分支合并图
$ git log --graph
//合并分支并生成新的提交,禁用 Fast forward,Fast forward模式合并分支会删除分支信息,合并记录查看不到
$ git merge --no-ff -m "description message" dev
//暂存当前工作现场(修改的文件保存着)
$ git stash
//查看stash的存储状态
{
切换分支进行工作
提交结束删除分支后切换分支再恢复之前的工作现场
}
$ git stash list
//还原工作现场并删除存储的工作现场
$ git stash pop
//还原工作现场
$ git stash apply
//删除stash中存储的工作现场
$ git stash drop
解决冲突
在提交代码之前其他成员提交了最新的修改(含有同样的文件)
先执行 git pull 将最新的提交抓取下来,在本地进行合并
pull失败:需要指定本地dev分支与远程分支的连接:git branch --set-upstream dev origin/<branch>
pull 之后解决冲突,重新进行提交 push
标签
//给最新提交的commit打上标签
$ git tag (版本号)
//给历史提交打标签
$ git log --pretty=oneline --abbrev-commit
$ git tag (版本号) commit_id
//查看标签
$ git tag
//查看指定标签的详细信息
$ git show tagname
//创建带有说明的标签 -a指定标签名,-m指定说明文字
$ git tag -a tagname -m "description message" commit_id
//删除标签
$ git tag -d (版本号)
//总结
命令 git tag name 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
-a tagname -m "blablabla..." 可以指定标签信息;
-s tagname -m "blablabla..." 可以用PGP签名标签;
命令 git tag 可以查看所有标签
//将标签推送到远程
$ git push origin (版本号) 或者 $ git push origin --tags
//将远程上的标签进行删除
$ git push origin :refs/tags/(版本号)
//使用总结
命令 git push origin tagname 可以推送一个本地标签;
命令 git push origin --tags 可以推送全部未推送过的本地标签;
命令 git tag -d tagname 可以删除一个本地标签;
命令 git push origin :refs/tags/tagname 可以删除一个远程标签
简单使用总结
首先试用 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 pull ,如果有冲突,要先处理冲突`
//git配置别名
$ git config --global alias.st status //将status指定快捷键st
$ git config --global alias.co checkout //将checkout指定快捷键co
$ git config --global alias.ci commit //将commit指定快捷键ci
$ git config --global alias.br branch //将branch指定快捷键br
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"