git使用总结

一、git与svn的区别:
版本控制的网络结构都是 一个服务器端(server) 多个或者一个客户端(client)
svn: 使用svn的时候我们checkout下载server的代码到本地的工作目录,修改代码后需要commit到server端,当别人修改本地代码并commit的时候 如果有冲突svn会有提示并且在冲突的地方标记,这时候需要提交代码者自行解决冲突。我们再次要修改代码的时候,为了同步别人的修改需要update 将server的新代码下载到本地并且与本地自己的代码合并。
git: git在本地就存在一个版本控制的概念,我们有自己的代码仓库以及版本控制。我们能看到的自己的代码是我们自己的工作目录(workspace),git add filename 添加新的文件到缓存区(index),这个是暂时的代码修改记录。当我们需要提交新的修改版本的时候就 git commit -m "修改说明" 提交到本地的代码版本控制区(local-repository),local-repository记录了你本地修改的各个版本 一次commit就记录一个版本,这个信息是在 隐藏文件夹 .git 中存放。这整个过程都是在本地的并未提交代码到server(remote repository),此时只是你在本地的代码控制。当我们需要与别人协同工作的时候就需要把本地代码版本同步到server,像是svn的commit,使用git push origin master,解释下这个命令:origin是远程仓库的名字,需要用 git remote add 远程仓库名字 远程仓库地址 这样的命令绑定地址到origin这个名字,这样我们以后使用这个名字就表示绑定的那个git地址;master是远程仓库的分支(branch)名称,分支可以有很多master是默认的分支,不同的人可以在不同分支工作,最后合并分支。
不同: svn集中化,更新代码(update)需要联网。git分布式,本地记录了项目的所有(别人的+自己的)改动。


在win上面需要用到一个命令行工具 msysgit
下载地址:http://msysgit.github.io/



二、使用git:
1、设置全局参数

一般需要设置下作者名称已经邮箱,这个数据在我们commit代码到 local-repo的时候会带入记录

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"


2、初始化你的工作目录(workspace)
在你的工作目录执行命令 生成一个初始的版本控制信息。创建记录 index local-repo信息的文件,生成的文件在 隐藏文件夹 .git 中
git init
如图 1




3、本地版本控制
在本地存在三个概念:
workspace   你的工作目录,也就是你在本地操作的代码
index 修改索引,这是一个暂存区,暂时存储你的修改 叫做索引通过git add filename 添加修改信息到索引
local-repo 本地的代码版本控制区,这里记录个所有的历史版本 git commit -m '...' 这个命令将index中记录的修改内容提交到lcaol-repo形成一个版本
workspace indexlocal-repo
-> add .-> commit ->先添加到索引再提交版本
--------->    commit -a------> 自己将自己的修改提交到版本

git add f1 f2   			将文件f1 f2 的改动暂存到索引
git add .					将当前文件夹的所有内容暂存到索引
git add -A 					添加所有文件到索引
git commit -m "修改信息" 	提交修改到本地版本(local-repo)形成新版本并在历史记录中产生一个版本记录
git commit -am "修改信息"	直接将修改提交到本地版本中(注意 index有过这个文件才能使用)
git status 					查看当前的版本状态 发现哪些文件修改需要add commit



4、通过远程库协同工作
首先你要有一个权限才能提交你的代码到远程库的(不然任何人都可以修改远程库的内容 引起混乱)。我们使用 github 的ssh key的机制完整这个验证
首先 我们在本地生成ssh key 这会产生两个key 一个私有的 一个共有的,共有的需要添加到github上面,私有的放你本地作为你的私有key。当你提交代码的时候本地发送你的私有key到github,github通过上面的公钥验证你发送的私有key,验证通过就会接受你的提交代码


a、生成ssh key
ssh-keygen -t rsa -C "邮箱" // 生成ssh key,期间会提醒你设置密码 可以设置为空(直接回车) 文件目录在 c\user\.ssh (就是你的系统默认的用户文件夹下 .ssh)
如图2:




b、添加公有key到github网站
用户页面 -> 右上角edit profile -> 左边列表 SSH keys -> add ssh key
title自己起一个 内容是你本地生成的公钥 id_rsa.pub 中的内容 复制进去
如图3:




c、定义一个github地址的别名 (要先在github上创建一个repo)
git remote add origin(别名) git@github.com:fantiq/git-use.git(地址)

git remote 					列出remote-repo别名
git remote -v 					列出remote-repo别名 以及对应的git地址
git remote add 别名 remote-repo地址	 	添加一个别名
git remote rename 老别名 新别名		 	重命名别名
git remote rm 别名 				删除别名


如图4:




b、同步本地代码到remote-repo

git push origin(remote-repo地址) master(分支)

如图5:


git的整个过程如下图:a




5、git中的分支使用
不同分支之间的操作是互不影响的

git branch 		列出存在的分支
git branch 分支名 	创建分支
git branch -d 分支名 	删除分支
git branch -D 分支名 	强制删除分支
git checkout 分支名 	切换分支
git checkout -b 分支名 	创建并切换 相当于 beanch name+checkout name



6、版本回退(这个操作都是在本地来完成的)
回退版本用的命令是 git rest 版本号
回退指定文件命令是 git checkout 版本号 文件名


解释下这个版本号:git上的版本号不是像svn上的用1、2、3...来命名,因为git是分布式 我们的版本仓库存放的也有其他人的修改 用 123命名会与别人的提交产生冲突。当我们commit的时候git会帮我们生成一个hash字符串 叫做commit id,这个字符串是唯一的 我们可以通过git log查看所有的提交信息 里面有你 提交版本号的hash字符串、提交人的名字 邮箱、提交时间、说明 。git log -p 显示每次提交的差异。
版本号可以有这几种表示方法
a、直接用commit id 可以只写出前面的部分
b、HEAD表示当前版本号 HEAD^ 上一个 HEAD ^^ 上上一个 HEAD~n 上n个
b方法比a方便,当我们回退到前一版本,发现操作错误项回到原来的版本的时候就只能用a方法。我们可以用 git reflog常看所有的版本操作,这样你可以找到之前的commit id 然后回退。命令 git reset有一个参数 --hard : git reset 版本id 只是将index回退到指定版本 workspace中不会修改(也就是你本地开发的代码), 要是想覆盖本地开发代码用这个参数 git reset --hard 版本号


版本回退:
git rest 版本号 将local-repo中指定的版本内容覆盖到index
git rest --hard 版本号 将local-repo中指定的版本内容覆盖到index以及worksapce
文件回退:
git checkout -- filename 从index捡出文件覆盖workspace
git checkout 版本号 -- filename 从local-repo中捡出指定版本的文件覆盖到workspace以及index


7、协作开发 更新本地代码仓库
git fetch 	remote-repo别名 分支 		
git merge 	分支名 						合并指定分支到当前分支
git pull 	remote-repo别名 分支 		下载远程代码库并尝试合并到本地 local-repo index workspace   相当于 git fetch + git merge
git diff 版本号 						查看版本的历史变化
git diff branch 						branch与当前分支的比较
git diff branch1 branch2				两个分支的比较


git fetch origin master:temp 下载远程库origin的master分支到本地的temp分支并新建temp分支
git diff temp 比较temp分支与当前分支的不同之处
git merge temp 合并temp到当前分支 出现冲突的地方会在文件中标注 git status 也会显示冲突的文件信息

##################
同样可以git fetch origin master 然后 git merge origin/master 但是实验没有成功




8、标签 标记当前版本HEAD的信息
git tag 				显示所有标签
git tag 				tagname 简单的创建标签
git tag -a tagname -m '标签说明' 	创建标签
git show tagname 			显示标签信息
git push origin tagname 		提交标签到远程



9、常用命令总结
git config --global user.name "name"		设置全局作者名
git config --global user.email "email" 		设置全局邮箱
git status  					查看当前代码库状态
git log 					查看提交记录
git add <f1> <f2> ...				添加工作目录的文件f1 f2 到index
git add .					添加当前文件夹的所有文件到index
git commit -m '注释' 				添加index的修改到local-repo 生成新的版本号
git commit -am '注释' 				add + commit
git remote 					显示所有的远程代码空别名
git remote -v 					显示别名以及指向的git地址
git remote add <alias> <addr> 		<span style="white-space:pre">	</span>添加别名
git remote rename <old> <new>		<span style="white-space:pre">	</span>重命名别名
git remote rm <alias> 				删除别名
git branch 					显示本地分支
git branch -a					显示说有的分支
git branch -r 					显示远程分支
git branch <name>				创建新的分支
git branch -d <name>				删除分支
git branch -D <name>				强制删除分支
git checkout <name> 				切换当前分支到name
git checkout -b <name>				branch <name>+checkout <name>
git checkout <版本号> 				指定local-repo中的版本号覆盖到index
git checkout -hard <版本号> 		<span style="white-space:pre">	</span>指定local-repo中的版本号覆盖到index 、workspace
git push origin master  			同步到 remote-repo
git pull origin master 				同步到本地 = fetch + merge
git diff b1 b2 					比较两个分支的不同
git diff b1 					比较b1与当前分支的不同
git diff 版本号 				比较指定版本的改变
git fetch origin master[:temp] 		<span style="white-space:pre">	</span>同步remote-repo到本地的 origin/master 分支
git merge b1 					将分支b1合并到当前分支


git 如何忽略文件   如何将一个空文件夹添加到索引 但是排除里面的所有内容



根目录放  一个文件  .gitngnore  文件规则 可百度 类似正则

例如有一个文件夹  log   想要提交这个文件夹  但是里面的内容全部排除掉 该怎么做?


git 是不能提交空文件夹 所以在空文件夹里面增加一个空文件  .empty     或者     .gitkeep   (这两个文件没区别)

然后 将这些文件commit到版本库

之后在增加 忽略规则










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值