您的位置:首页 > 其它

git的基础知识及简单用法

2016-07-05 11:09 337 查看
使用分布式版本控制的好处

1.就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。但额外增加的工作量却微乎其微。

2.大部分操作的可以本地执行 -快速高效

git命令

git help(帮助)
例 git help clone 查看clone指令的所有操作文档(按Q退出)
//使用
先初始化本地仓库 `git init`
`git status` 可查看文件状态
`git add 文件名` 纳入git管理
`git commit -m "注释"` 提交到本地
一般使用时为了方便  直接`git commit -a -m “备注信息"`来提交到本地
`git diff` 查看尚未暂存的文件更新了哪些部分
`git diff --cached`查看已经暂存起来的变化


git log 查看日志
红色文件:文件没有被纳入git管理中
modified红色 修改后的文件(需要先添加在提交)
绿色文件:文件已经加入到了 ' 暂存区 '
工作区 除了 .git文件夹以外
版本库 git 目录 存储所有版本记录
版本号: 黄色commit 40位(哈希值) 唯一的 只要服务器版本不一样就可以提交到远程服务器
`git log -p -2`
-p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
`git log --pretty=oneline`将每个提交放在一行显示
`git log --pretty=format:"%h - %an, %ar : %s"`格式化输出


常用的格式占位符



添加日志搜索条件



*配置账号信息(一般来讲只需要配置一次全局的账号即可)

配置局部: 保存在.git --->config
`git config user.name "tangseng" `配置用户名(区分责任人)
`git config user.email "tangseng.@xitian.com"` 配置邮箱 用于联系开发者
配置全局 finder -> 前往 -> 个人-> .gitconfig(修改的是默认 不会在文件局部中出现)
`git config --global user.name "wukong"`
`git config --global user.email "wukong.@xitian.com"`
* 如果同时配置了 局部全局 优先局部


**版本回退**

`git reset --hard HEAD^` 一个^代表一个版本
`git reset --hard 版本号` (7位版本号)
`git reflog` 查看历史记录(如果git回到早起版本 后面的版本将不存在 如果要回退到之前 那么通过这个指令来查看版本号来进行回退)


tag标签

显示的标签按字母顺序排列,所以标签的先后并不表示重要程度的轻重。

列出现有标签的命令非常简单,直接运行
git tag
即可(如果没有任何反应 就证明没有标签)

新建标签:
git tag -a v1.4 -m 'my version 1.4'


-m 选项则指定了对应的标签说明

可以使用
git show
命令查看相应标签的版本信息,并连同显示打标签时的提交对象。

git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库
git push origin v1.5


这样其他开发者在数据同步后 也可以看到这个标签

如果要一次推送所有本地新增的标签上去,可以使用 –tags 选项

git push origin --tags


删除远程标签
git push origin :v1.5


删除本地标签
git tag -d v1.5


分支

git branch
查看本地分支

git branch -r
查看远程分支

git branch -a
查看所有分支

git branch test
创建名为test 分支

git checkout test
切换到 test分支

git branch -D test
删除本地分支

git branch -v
查看各个分支最后一个提交对象的信息

git branch --merge
查看哪些分支已被并入当前分支

git branch --no-merged
查看尚未合并的分支

git push origin :test
删除远程分支(推送个空的分支到远程)

git checkout -b test
相当于新建test分支并且切换到test分支

分支的合并

如果要将开发中的分支(develop),合并到稳定分支(master),

首先切换的master分支:
git checkout master


然后执行合并操作:
git merge develop


远程

git remote -v
查看远程主机网址

git remote rm 主机名
删除远程主机

git remote rename 源主机名 新主机名
更改远程主机的名称

git remote add 主机名 网址
添加远程主机

git remote show 主机名
可以查看主机的详细信息

git fetch


将远程主机版本库更新取回本地

git fetch 远程主机名
将远程更新全部取回本地

git fetch 远程主机名 分支名
取回特定分支更新

fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。

git pull


取回origin主机的next分支 与本地的master分支合并

git pull origin next:master


如果远程分支是当前分支 则冒号后面的部分可以省略

git pull origin next


如果当前分支与远程分支存在追踪关系 可省略远程分支名

git pull origin


等价于 下两部操作

gitfetchorigin git merge origin/next

git push
将本地分支更新推送到远程主机

git push 远程主机名  本地分支名:远程分支名


如果省略远程分支名 则如果不存在 会自行创建

如果省略本地分支名 则表示删除指定的远程分支(等同于推送一个空的本地分支到远程分支)

git push origin :master 删除origin主机上的master分支

起别名

git config --global alias.co checkout
这样在使用checkout命令时 只需 git co (个人不推荐使用起别名)

手动建立追踪关系 tracking

git branch --set-upstream master origin/next
指定master 追踪origin/next分支

如果合并需要采用rebase模式 可以使用 –rebase

git pull  --rebase 远程主机名 远程分支名:本地分支名


git merge和rebase的区别

对于两个分支而言,rebase和merge没有区别,但是rebase更干净,因为log hisitory是线性的,但commit不一定按日期先后排,而是local commit总在后面,merge之后history变得比较复杂,但是commit按日期排序,stackoverflow上有个图示很好:



git pull -p
在本地删除远程已经删除的分支

多人开发配置

- 初始化服务器: git init --bare(到指定文件夹中 不需要隐藏)
- 克隆代码(下载): git clone 服务器路径(第一步指定位置)
- 设置忽略文件 (Github -> .gitignore )
- 保证.gitignore 根.git 在同一目录下(.git负责管理)
- 配置个人信息config
- 将.gitignore 推送给远程服务器


实际开发

1.发布版本
2.开发新需求
3.发现重大BUG
解决步骤:
首先发布版本之后 创建新的分支来开发新需求,当发现重大BUG时 从主分支在创建新的分支 来修改 测试完成后合并到主分支 并删除当前分支 并发布到生产服务器,在切换到新需求分支  继续进行开发工作

如果合并中遇到了冲突(不同分支修改了同一个文件的统一部分)
在执行git merge 后git作了合并 但并没有提交 会停下来等你解决冲突/此时可用 git status来查看 `Unmerged paths:`会告诉你冲突位置git会自动在有冲突的文件中加标记
======上半部分 是当前分支内容 下半部分是合并过来的分支 选择一个删除另一个来解决冲突
解决之后  需要再次进行commit操作来完成合并

注:如果多人开发有固定分支 master develop 个人分支
合并时 需要先从develop远程分支pull代码 然后在合并个人分支到develop 并push到服务器上 等功能稳定或者到一定阶段时 在合并到master


如有不懂的地方参考http://git.oschina.net/progit/

推荐图形化工具SourceTree 别问我为什么 因为我只用过这个 并且已经满足了我的基本需求

如需翻墙 推荐 鱼摆摆 https://ybb1024.com省时省力只需9元/月
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: