git-总结
2016-01-26 09:43
260 查看
安装git
查看git是否安装git The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git 安装git sudo apt-get install git
创建版本库
mkdir learngit cd learngit git init
添加文件到git仓库,分两步
第一步:git add <file> 第二步:git commit -m "description information" git add --all git add 命令的all参数,表示保存所有变化(包括新建、修改和删除)。从git 2.0开始,all是git add的默认参数,所以也可以用git add . 代替
查看当前git仓库状态
git status 查看修改后的文件跟原先有什么不同 git diff <file> 显示从最近到最远的提交日志 git log git log --pretty=oneline
版本回退
git reset --hard HEAD^ 版本回退到某个版本 git reset --hard 3628164 git是跟踪修改的,每次修改如果不add到暂存区,就不会加入到commit中
撤销修改
git checkout -- file 命令git checkout -- readme.txt 的意思是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况 一种是readme.txt自修改后还没被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; 一种是readme.txt已经添加到暂存区,后又作了修改,现在,撤销修改就回到了添加到暂存区后的状态; 总之,就是让这个文件回到最近一次git commit 或git add的状态。
删除文件
git rm test.txt git commit -m "remove test.txt"
远程仓库
创建ssh keyssh-keygen -t rsa -C "1126785053@qq.com"
登录Github,打开Account settings
Add SSH Key
添加远程仓库
git remote add origin git@github.com:liruizhong/learngit.git git push -u origin master git push origin master
克隆一个远程仓库到本地
git clone git@github.com:liruizhong/gitskill.git
分支管理
创建与合并分支创建一个dev分支,然后切换到dev分支
git checkout -b dev
等同于
git branch dev git checkout dev
查看当前分支
git branch *dev master 当前分支前会标一个*号
合并指定分支到当前分支
git merge dev
删除分支,此处以删除dev为例
git branch -d dev
小结
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
解决冲突
git log --graph --pretty=oneline --abbrev-commit 可以查看到分支合并图
分支管理策略
在实际开发中,我们应该按照介个基本原则进行分支管理首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
小结:
Git分支十分强大,在团队开发中应该充分应用
合并分支时,加--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
DUG分支
去修复bug前,将当前工作去储存 git stash然后切换到要修复bug的分支git checkout master
创建临时分区修复bug :git checkout -b issue-101
修复完成提交:git add readme.txt git commit -m "fix bug issue-101"
切换回主分支:git checkout master
将issue-101分支合并到主分支:git merge --no-ff -m "merged bug fix 101" issue-101
删除临时分支issue-101:git branch -d issue-101
然后切换回原工作区:git checkout dev
查看自己当时的储存工作现场:git stash list
恢复工作现场:
一种方法: git stash apply stash@{0} git stash drop
另一种方法:git stash pop
Feature分支
小结:开发一个新的feature,最好新建一个分支
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除
多人协作
多人协作的工作模式通常是这样的:首先,可以试图用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-upsream branch-name origin/branch-name
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
标签管理
创建标签
小结命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a -m "blablabla..." 可以指定标签信息;
git tag -s -m "blablabla..." 可以用PGP签名标签;
命令git tag 可以查看所有标签;
操作标签
小结命令git push origin 可以推送一个本地标签;
命令git push origin --tags 可以推送全部未推送过的本地标签;
命令git tag -d 可以删除一个本地标签;
命令git push origin :refs/tags/可以删除一个远程标签
使用GitHub
小结在GitHub上,可以任意Fork开源仓库;
自己拥有Fork后的仓库的读写权限;
可以推送pull request给官方仓库来贡献代码。
忽略特殊文件
小结忽略某些文件时,需要编写.gitignore;
.gitignore文件本身要放到版本库里,并且可以对.gitinore做版本管理!
配置别名
git config --global alias.st status git config --global alias.co checkout git config --global alias.ci commit git config --global alias.br branch 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"
配置文件
$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [remote "origin"] url = git@github.com:michaelliao/learngit.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [alias] last = log -1 $ cat .gitconfig [alias] co = checkout ci = commit br = branch st = status [user] name = Your Name email = your@email.com
相关文章推荐
- 12个JQuery小贴士
- 繁华与落寞不过是过眼烟云
- [Ajax-相濡以沫,不如相忘于江湖] Ajax初识
- Gradle 多环境配置
- iOS开发笔记--cell最右边显示箭头,字符,自定义分割线
- ireport输出
- 如何解决问题?
- Android中图片转化为bitmap
- 2016.01.25回顾
- ios 验证码倒计时
- 关于环信集成报错问题之一
- Java控制语句——if语句
- ListView始终显示垂直滚动条设置
- JS组件中bootstrap multiselect两大组件较量
- lightoj 1012 - Guilty Prince
- boost 1.56.0 编译及使用
- Spring4 MVC 整合Hibernate5 附源码下载
- null与undefined的区别
- Jenkins 学习资料
- Linux vi