Git版本管理荟萃
用惯了svn,突然转到git难免有点不适,写个笔记好好备忘总结一番。
一、先看历史(imooc上的一个图):
二、git与svn
GIT跟SVN一样有自己的集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,就像在飞机上,地下室,电梯里等,你仍然能够提交文件,查看历史版本记录,创建项目分支,等。对一些人来说,这好像没多大用处,但当你突然遇到没有网络的环境时,这个将解决你的大麻烦。
三、那什么情况推荐使用svn
SVN具有的悲观锁的功能,能够实现一个用户在编辑时对文件进行锁定,阻止多人同时编辑 一个文件。这一悲观锁的功能是 Git 所不具备的。对于以二进制文件 (Word文档、PPT演示稿) 为主的版本库,为避免多人同时编辑造成合并上的困难, 建议使用SVN做版本控制。
四、git工作原理
这边文章介绍的不错 Git from the Bottom Up
五、git安装配置
mac下实际无需安装直接在命令窗口输入git即可弹出安装确认,这种方式安装默认是安装到/usr/bin目录下,且不需要配置环境变量
另一种方式就是手动安装dmg包,需要配置环境变量
官网下载:http://git-scm.com/download/mac
vi ~/.bash_profile
export PATH="/usr/local/git/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:$PATH"
source ~/.bash_profile
重启一下终端,检查是否安装成功
git version
用户信息配置:
$ git config --global user.name "jager"
$ git config --global user.email jager@example.com
或 直接编辑配置文件:
vi ~/.gitconfig [user]
name = jager
email = jager@example.com
[color]
ui = auto
branch = auto
diff = auto
status = auto
[color "branch"]
current = green
local = yellow
remote = red
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
[color "status"]
added = yellow
changed = green
untracked = cyan
[alias]
st = status
di = diff
ci = commit
co = checkout
br = branch
配置公私钥:
== 生成git密钥 ==
ssh-keygen -t rsa -C "jager@example.com"
秘钥名称填写:git_rsa
其他默认即可 == 配置git密钥 ==
vim ~/.ssh/config
//增加以下内容,IdentityFile路径为你生成的git私钥文件路径
Host XXX
User git
IdentitiesOnly yes
IdentityFile /Users/你的用户名/.ssh/git_rsa == 配置公钥 ==
拷贝公钥 pbcopy < ~/.ssh/git_rsa.pub
添加到git管理平台 == FAQ ==
最后一步没配置可能出现错误:
Permission denied (publickey).
fatal: Could not read from remote repository.
六、git常用命令
- workspace: 本地工作目录
- index:缓存区域,临时保存本地改动
- local repository: 本地仓库
- remote repository:远程仓库
== git配置 ==
git config --list //查看当前git的配置,Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置) == 查看信息 ==
git log //查看提交记录
git status //查看修改状态
git diff //查看详细修改内容
git show //显示某次提交的内容
git branch //列出所有本地分支
git tag //列出所有tag
git reflog //显示当前分支的最近几次提交 == 新建代码库 ==
git init //在当前目录新建一个Git代码库
git init [project-name] //新建一个目录,将其初始化为Git代码库
git clone [url] //下载一个项目和它的整个代码历史 == 增加/删除 ==
git add [file1] [file2] ... //添加指定文件到暂存区
git add [dir] //添加指定目录到暂存区,包括子目录
git add . //添加当前目录的所有文件到暂存区
git rm [file1] [file2] ... //删除工作区文件,并且将这次删除放入暂存区
git mv [file-original] [file-renamed] //改名文件,并且将这个改名放入暂存区 == 代码提交 ==
git commit -m [message] //代码提交到本地仓库
git commit [file1] [file2] ... -m [message] //提交指定文件到本地仓库
git commit -a //提交工作区自上次commit之后的变化,直接到仓库区
git commit -v //提交时显示所有diff信息
git commit --amend -m [message] //使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来改写上一次commit的提交信息 == 分支管理 ==
git branch -r //列出所有远程分支
git branch -a //列出所有本地分支和远程分支
git branch [branch-name] //新建一个分支,但依然停留在当前分支
git checkout -b [branch] //新建一个分支,并切换到该分支
git checkout [branch-name] //切换到指定分支,并更新工作区
git checkout - //切换到上一个分支
git merge [branch] //合并指定分支到当前分支(如master)
git branch -d [branch-name] //删除分支
git push origin --delete [branch-name] //删除远程分支
git branch -dr [remote/branch] //删除远程分支 == 远程同步 ==
git fetch [remote] //下载远程仓库的所有变动,到index
git pull //更新本地仓库至最新改动,到workspace
git remote -v //显示所有远程仓库
git remote show [remote] //显示某个远程仓库的信息
git remote add [shortname] [url] //增加一个新的远程仓库,并命名
git pull [remote] [branch] //取回远程仓库的变化,并与本地分支合并
git push origin master //推送至master分支
git push [remote] [branch] //上传本地指定分支到远程仓库
git push [remote] --force //强行推送当前分支到远程仓库,即使有冲突
git push [remote] --all //推送所有分支到远程仓库 == 撤销 ==
git reset [file] //重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset --hard //重置暂存区与工作区,与上一次commit保持一致
git checkout //从index恢复到workspace
git checkout . //恢复暂存区的所有文件到工作区
git checkout -- files //文件从index恢复到workspace
git checkout HEAD -- files //文件从local repository复制到workspace == 冲突解决 ==
git diff //对比workspace与index
git diff HEAD //对于workspace与最后一次commit
git diff <source_branch> <target_branch> //对比差异
git add <filename> //修改完冲突,需要add以标记合并成功
七、git使用流程规范【重要】
下面是ThoughtBot 的Git使用规范流程,推荐使用:
Create a local feature branch based off master.
Rebase frequently to incorporate upstream changes.
Resolve conflicts. When feature is complete and tests pass, stage the changes.
When you've staged the changes, commit them.
Write a good commit message. Example format:
If you've created more than one commit, use
Share your branch.
Submit a GitHub pull request. Ask for a code review in the project's chat room. |
总结大致如下:
- 新建分支
- 提交分支
- 撰写commit信息
- 与主干同步
- 合并commit
- 推送到远程仓库
- 发出pull request,请求别人进行代码review
参考文档:
中文官方文档:https://git-scm.com/book/zh/v2
Git版本管理荟萃的更多相关文章
- Git 版本管理的简单理解
来源:百度知道 现在使用Git版本管理代码的项目非常多.但是Git本身是一条复杂的系统.我从几个简单的点来说明Git的基本功能.希望能帮助初学者快速入门. 工具/原料 Git code dot j ...
- GIT版本管理工具
原文:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介 ...
- git学习——<四>git版本管理
一.git版本管理的优势 都说git比svn强大,强大在哪呢? 首先,从部署上说:svn.cvs都是集中式的,一台服务器上部署服务,所有客户端编写的代码都要提交到该服务器上.git是分布式的,所有人都 ...
- Git——版本管理工具(一)
Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git —— The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背 ...
- Git 版本管理工具(一)
转自:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介 ...
- GIT版本管理工具教程
目录 GIT版本管理工具教程 一 Git初始化 二 简单指令使用 基本操作 简单总结 三 Git进阶 Git三大区域 Git回滚 Git分支 Git工作流 四 Github代码管理仓库 第一步:注册G ...
- [工具] Git版本管理(知识总结)
对以下文档进行了简要总结,方面复习: [工具] Git版本管理(一)(基本操作) [工具] Git版本管理(二)(分支) [工具] Git版本管理(三)(工作流) [工具] Git版本管理(四)(贡献 ...
- [工具] Git版本管理(四)(贡献开源代码、git配置、git免密、gitignore)
一.开源项目贡献代码 1.fork项目代码 例如,我们想向tornado框架贡献代码,首先搜索tornado. 然后,将tornado的代码fork到我们的仓库中. 2.clone到本地进行开发 克隆 ...
- 开启我的python之路,第一节,git版本管理工具
git版本管理工具 一.git功能与结构 1.Git是分布式管理系统,服务端和客户端都有版本控制功能,都能进行代码的提交,合并 2.git分为工作区,暂存区,本地仓库和远程仓库 二.git安装与查看 ...
随机推荐
- 学习笔记——Java包装类
由于Java不能定义基本类型的对象,所以通过包装类提供了各种可用方法的封装. 这一部分的知识,需要能够通过查看Integer.Boolean.Byte.Character.Double.Number类 ...
- WebApi接口传参不再困惑:传参详解
原文出处: 懒得安分 前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望 ...
- spring事务源码解析
前言 在spring jdbcTemplate 事务,各种诡异,包你醍醐灌顶!最后遗留了一个问题:spring是怎么样保证事务一致性的? 当然,spring事务内容挺多的,如果都要讲的话要花很长时间, ...
- ER图是啥?
文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现 ...
- Bug记载1之webpack本地安装
当我安装前端打包工具webpack时,cmd命令出现了这么一句关键性的提示: npm ERR ! Refusing to install package as a dendency of itself ...
- 解决error104 connection reset by peer;socket error问题
这个问题原因有两个: 1.因为你访问网站太多次,所以被网站管理员给禁止访问了. 解决方法: 1.延长time.sleep时间 2.设置代理 2.根本没有这个网站.(打开链接检查一下!!!)
- HTTP协议分析
一.域名概述 1.域名解析的作用: 主机数量增多时,IP地址不容易记忆,域名方便记忆.域名记忆更加直观. 2.hosts文件 早期通过hosts文件进行域名的解析,Linux系统中hosts文件存放路 ...
- jQuery kxbdMarquee 无缝滚动
转:http://code.ciaoca.com/jquery/kxbdmarquee/ <marquee> 曾是 IE 下独有的一个走马灯效果的标签,其他浏览器并不兼容,于是出现了使用 ...
- IDEA使用心得-----懒得截图了,但是大家应该看得懂
1.界面设置,有白色和 黑色风格两种,我个人喜欢黑色风格,护眼最重要的是看着帅. 设置方法:FILE--Settings--Editor--Colors&Fonts--Scheme name ...
- Python 爬取qqmusic音乐url并批量下载
qqmusic上的音乐还是不少的,有些时候想要下载好听的音乐,但有每次在网页下载都是烦人的登录什么的.于是,来了个qqmusic的爬虫. 至少我觉得for循环爬虫,最核心的应该就是找到待爬元素所在ur ...