git 是一款非常强大的版本控制工具,现在市场占有率应该是一家独大了,以前用svn的童鞋估计都转投git阵营了吧
加上很多公司也用git管理自己的项目,所以说作为开发人员,git是必学的技术之一了。
当初公司需要使用git,必须快速入门,所以网上狂搜git入门教程,(以前听说很多人说去官网看第一手资料,对英
文不错的同学来说固然不错,但对于我这种英文不是很牢靠的还是需要一些更简单的方式,毕竟也需要马上上手投入使用)
,还是找到了非常不错的文章,廖雪峰的git教程(http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)
介绍的很全。
借助大牛的大纲 ,我自己总结一下git的基本使用:
- 简介 : git 是分布式的版本控制系统,而以前的CVS和SVN都是集中式的版本控制系统,git的代码仓库在每个人
人的本机上都会存储一个副本,有工作区,暂存区,本地库,远程库四个概念,我们在工作区工作,add到暂存区,commit
到本地库,一切确认ok了,就push到远程库。 当然这中间会有很多问题,比如代码冲突(程序员最头痛的问题)。
push到的远程库目前我自己用到的有两个,1git.github.com 2 git.oschina.net(中国开源站,里面很多的开源代码,非常 nice的学习资料)
2.git的安装
我们可以建立自己的git仓库,需要去git下载,不过我们一般都是把项目托管到github和oschina上,如果以后遇到,再来记录搭建git服务器
的详细步骤。
目前我们只需要安装一个本地git客户端即可。windows安装git客户端即可,linux下 yum install git 安装git ,一般已经安装了。
3.在本地创建一个版本库 : git init
会出现一个.git 文件夹,用于跟踪项目版本修改记录
4.用的最多的命令: git status , git add , git commit -m "注释" ,git push , git pull
git status 查看本地版本库的状态 ,有没有未跟踪,修改未提交,提交未推送到远程库的信息全部会显示。
如果要看想提交的文件和库里的有什么不同,git diff 【文件名】 可以对比文件
git add 【文件名 空格 文件名 】 或者 .(点,代表跟踪的 所有文件) 将文件从工作区添加到暂存区。
git commit 提交到本地库
git push 把本地已经提交的记录,推送到远程库。
git pull 从远程库拉取别人更新的代码
5.在四个区域转换修改有用的命令:
git reset --hard HEAD^ 回退到上个提交的版本 也可以吧HEAD^用commit_id替换 ,可以用git log 查看日志记录中的commit_id
如果有add了的但又不想提交的怎么办呢,得使用 git reset HEAD【全路径文件名】 把不想提交的从暂存区拉到工作区才行。
工作区的代码不要了,让本地库中的代码覆盖,重新写,用git checkout 【文件名】 撤销工作区的修改,重新开始。
当我在编写ATask任务,想干其他模块的工作BTask ,暂存区的工作内容保存起来,然后回到代码库的代码,想用的时候再恢复过来。
用 git stash 所有工作区的修改ATask 暂时存储,且工作区恢复到修改之前了。
BTask 其他模块编写完毕,提交后,想把ATask恢复到工作区,git stash pop 恢复。
当然可以暂存很多这种任务,可用git stash list 查看任务。
想恢复其中一个而不是最上面的一个时 用 git stash apply [名称,通常为stash@{0}]
现在我有一系列的未跟踪的文件(未被放到工作区),想删掉,可用 git clean -f
连同目录一起删除 git clean -fd
连.gitignore文件中标明的目录也删掉,呃,当然这个一般别用,git clean -xfd
以上三个命令 参数都可加上-n,先查看哪些文件要删除,会先列出个列表 , git clean -nf ,git clean -nfd , git clean -nxfd
好了,3,4,5点都是针对单个分支的操作,下面来讲一下多个分支的基本操作:
6.分支的操作:
新建一个分支 :git branch 【分支名A】 ,这个是以当前分支为基础,比如当前分支在master,A分支就是master的一个副本
还可以git branch -b [分支名A] 创建并切换到分支A
删除分支 : git branch -d 【分支名A】
合并分支:git merge master , 假设当前分支为A ,把master分支代码合并到A分支。
分支合并并记上日志:git merge --no-ff -m "分支合并日志记录" master
查看分支合并图 : git log -graph
查看所有分支的日志 :git relog
7.远程推送操作:
把远程代码拉到本地 git clone git.oschina.net@fubin/fubin.git
删除远程分支:本地分支删除了之后,如果已经推送到远程,我们得删除远程分支 :git push origin :A
这个方法是把一个空的名字的分支推送到远程并覆盖A,就删除了。
那我们怎么提交代码或者推送建好的分支到远程呢:
(1)如果已经关联好了,直接git push
(2)远程有,没关联好,git push -u origin/remote_branch
(3)远程没有,需要新建一个推送,git push origin local_branch:remote_branch
(3)的另一种方法,假如我们有一个本地库,一个远程库,想关联起来,git remote add origin git.oschina.net@fubin/fubin.git
8.遇到的一些问题汇总:
《1》 提交代码的时候需要输入密码,可长期存储密码配置:git config --global credential.helper store
《2》 日志漂亮的配置:
git log --pretty=oneline 单行显示日志
别名配置:git lg 树形结构显示日志,很方便。
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"
其实这些配置都记录在.gitconfig 文件中:部分内容如下:
[color]
diff = auto
status = auto
branch = auto
[user]
name = fubin
email = 1401626753@qq.com
[gui]
encoding = utf-8
recentrepo = E:/Workspace/vpfinance
[push]
default = matching
[credential]
helper = store
[alias]
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
《3》 以master为模板创建远程分支过程:
1. 创建分支 git branch -b A 2 git push origin A:A
《4》 新建一个项目,push到远程步骤:
1. 本地新建项目
2. 新建本地仓库 并git init
3 .远程新建项目
4.本地和远程建立关联 git remote add origin git.oschina.net@fubin/fubin.git
5.拷贝本地项目到本地仓库
6.提交
《5》 如何忽略已跟踪的文件?
git update-index --assume-unchanged filename
撤销忽略:
git update-index --no--assume-unchanged filename
《6》 删除已经入库的文件夹,这个是直接删除远程库,本地库也一起删除,需要小心操作。
git rm -f --cached .idea/
git commit -m "删除已入库的文件夹"
《7》 git的维护(git gc 和 git fsck)
git fsck 运行一些仓库的一致性检查, 如果有任何问题就会报告. 这项操作也有点耗时, 通常报的警告就是“悬空对象"(dangling objects).
《8》 git push 时报错 error: cannot lock existing info/refs
在环境中执行 git update-server-info 后解决问题
《9》 提示出错信息:fatal: remote origin already exists.
删除远程分支关联:
git remote rm origin