git 是一款非常强大的版本控制工具,现在市场占有率应该是一家独大了,以前用svn的童鞋估计都转投git阵营了吧
加上很多公司也用git管理自己的项目,所以说作为开发人员,git是必学的技术之一了。
当初公司需要使用git,必须快速入门,所以网上狂搜git入门教程,(以前听说很多人说去官网看第一手资料,对英
文不错的同学来说固然不错,但对于我这种英文不是很牢靠的还是需要一些更简单的方式,毕竟也需要马上上手投入使用)
介绍的很全。
借助大牛的大纲 ,我自己总结一下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
[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
- [习题]日历(Calendar)控件的障眼法(.Visible属性),使用时才出现?不用就消失?
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/09/02/calendar_icon_visible.aspx [习题]日历(Cal ...
- Git操作学习笔记
根据廖雪峰老师git教程学习整理 这里需要辨析一下概念.Github是代码托管平台,是协作的工具;而Git是版本控制工具.Git不需要联网,在本机就可以使用 集中式版本控制系统与分布式版本控制系统 S ...
- 【Git】学习开始
[Git]学习开始 转载:https://www.cnblogs.com/yangchongxing/p/10172683.html 在线电子书籍:https://git-scm.com/book/z ...
- Android Loader使用时,屏幕解锁后,重复加载
在使用AsyncTaskLoader时,当手机解锁后,会重复加载数据,代码如下: static class CouponShopQueryLoader extends AsyncTaskLoader& ...
- Cookie使用时需要注意个数及大小限制
各浏览器对Cookie有一定的限制,在使用时需要格外注意. 各浏览器之间对cookie的不同限制: IE6.0 IE7.0/8.0/9.0+ Opera FF Safari Chrome cook ...
- EntityFrameWork 使用时碰到的小问题
EntityFrameWork 使用时碰到的小问题 1,在使用orm访问数据库的相目里,也要引用EntityFrameWork.dll,否则无法使用orm 否则,编译错误 错误 5 "Sys ...
- MySQL 安装和启动服务,“本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”
MySQL 安装和启动服务,以及遇到的问题 MySQL版本: mysql-5.7.13-winx64.zip (免安装,解压放到程序文件夹即可,比如 C:\Program Files\mysql-5. ...
- git入门学习(二):新建分支/上传代码/删除分支
一.git新建分支,上传代码到新的不同分支 我要实现的效果,即是多个内容的平行分支:这样做的主要目的是方便统一管理属于同一个内容的不同的项目,互不干扰.如图所示: 前提是我的github上已经有we ...
- git入门学习(一):github for windows上传本地项目到github
Git是目前最先进的分布式版本控制系统,作为一个程序员,我们需要掌握其用法.Github发布了Github for Windows 则大大降低了学习成本和使用难度,他甚至比SVN都简单. 一.首先在g ...
随机推荐
- HTTP Referer二三事---转
授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/320)的形式标明文章原始出处和作者信息及本声明. 什么是HTTP Refer ...
- 基于 SquashFS 构建 Linux 可读写文件系统
转载:http://www.oschina.net/question/129540_116839 在当前的嵌入式操作系统开发中,Linux 操作系统通常被压缩成 Image 后存放在 Flash 设备 ...
- C# 代码生成工具 Millennials
Millennials 是一个可定制的 C# 代码生成工具,支持 MVC 和三层架构.ADO.NET.Nhibernate 和 LINQ. 项目主页:http://www.open-open.com/ ...
- solr--搜索参数随笔
1.默认搜索域.查询域的关系 qf字段的配置:query fields,指定solr从哪些field中搜索 在solrj中设置如下: params.setParam("qf", & ...
- [Java] SSH框架笔记_S2SH整合步骤
http://tech.ddvip.com/2009-09/1253783051134206.html http://www.blogjava.net/liu0909/archive/2009/07/ ...
- [Java] SSH框架笔记_框架整合示例(一)
本文描述的是框架SSH集成的示例,由于在这个过程中有一些小的细节容易被遗忘,特别撰写了一篇小的博文来记录这个过程,希望对自己以及后来者能够起到积极意义. 本文中使用的框架和版本号为: struts-2 ...
- c#代码使用ResourceDictionary样式
对于ResourceDictionary样式代码: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006 ...
- 剑指Offer13 链表倒数第K个结点
/************************************************************************* > File Name: 13_KthNod ...
- hdu 4411 最小费用流
思路:主要就是要把一个每个城市拆为两个点,建一条容量为1,费用为-inf的边,保证每个城市都会被遍历. /*最小费用最大流*/ #include<iostream> #include< ...
- Terminate program hitting CTRl+C within GDB
Q: My program is determined to stop its execution by hitting CTRL+C in command window. By now, i hav ...