两者区别
- 最核心的区别Git是分布式的,而Svn不是分布的。
- Git把内容按元数据方式存储,而SVN是按文件
- git离线可查看原来版本和log
git 分布式版本控制系统
为什么使用 git
- 完整的版本控制功能,解决多人协作问题
- 提高开发效率
状态:已修改—>已暂存—>已提交
每次提交都有一个摘要值
针对所有仓库
执行命令git config --global user.name "你的用户名"
,告诉git你的名字,这个用户名会出现在提交记录中
执行命令git config --global user.email "你的邮箱"
,告诉git你的邮箱
ssh -T git@github.com
命令
创建SSHkey ssh-keygen -t rsa -C "your_email@example.com"
拉取、上传免密码:
- git config —global user.name “”
- git config —global user.email “”
分支操作:
- git branch 创建分支
- git branch -b 创建并切换到新建的分支上
- git checkout 切换分支
- git branch 查看分支列表
- git branch -v 查看所有分支的最后一次操作
- git branch -vv 查看当前分支
- git brabch -b 分支名 origin/分支名 创建远程分支到本地
- git branch —merged 查看别的分支和当前分支合并过的分支
- git branch —no-merged 查看未与当前分支合并的分支
- git branch -d 分支名 删除本地分支
- git branch -D 分支名 强行删除分支
- git branch origin :分支名 删除远处仓库分支
- git merge 分支名 合并分支到当前分支上
暂存操作:
- git stash 暂存当前修改
- git stash apply 恢复最近的一次暂存
- git stash pop 恢复暂存并删除暂存记录
- git stash list 查看暂存列表
- git stash drop 暂存名(例:stash@{0}) 移除某次暂存
- git stash clear 清除暂存
回退操作:
- git reset —hard HEAD^ 回退到上一个版本
- git reset —hard ahdhs1(commit_id) 回退到某个版本
- git checkout — file撤销修改的文件(如果文件加入到了暂存区,则回退到暂存区的,如果文件加入到了版本库,则还原至加入版本库之后的状态)
- git reset HEAD file 撤回暂存区的文件修改到工作区
标签操作:
- git tag 标签名 添加标签(默认对当前版本)
- git tag 标签名 commit_id 对某一提交记录打标签
- git tag -a 标签名 -m ‘描述’ 创建新标签并增加备注
- git tag 列出所有标签列表
- git show 标签名 查看标签信息
- git tag -d 标签名 删除本地标签
- git push origin 标签名 推送标签到远程仓库
- git push origin —tags 推送所有标签到远程仓库
- git push origin :refs/tags/标签名 从远程仓库中删除标签
常规操作:
- git push origin test 推送本地分支到远程仓库
- git rm -r —cached 文件/文件夹名字 取消文件被版本控制
- git reflog 获取执行过的命令
- git log —graph 查看分支合并图
- git merge —no-ff -m ‘合并描述’ 分支名 不使用Fast forward方式合并,采用这种方式合并可以看到合并记录
- git check-ignore -v 文件名 查看忽略规则
- git add -f 文件名 强制将文件提交
git创建项目仓库:
- git init 初始化
- git remote add origin url 关联远程仓库
- git pull
- git fetch 获取远程仓库中所有的分支到本地
忽略已加入到版本库中的文件:
- git update-index —assume-unchanged file 忽略单个文件
- git rm -r —cached 文件/文件夹名字 (. 忽略全部文件)
取消忽略文件:
- git update-index —no-assume-unchanged file
1. 获得版本库
git init
初始化本地仓库
git clone
克隆远程仓库到本地
2. 版本管理
git status
查看当前分支并查看状态 (Initial commit初始提交—>已修改状态)
git add
将已修改的文件纳入暂存区中 —->已暂存状态
git rm file
从文件目录中删除文件并纳入暂存区
rm
与上删除类似,需要add
git rm --cached <file>...
回退到unstage,或者说是从暂存区恢复到工作区—->已修改 或者
git reset HEAD test.txt...
修改后需要从缓存区删除 (功能同上)—->已修改
git commit -m "first commit"
提交到仓库,常规需要有注释
git commit --amend -m "把上次提交的注释修改"
git checkout -- test.txt
丢弃个人的所有修改(需要小心使用)
git mv file file2
重命名 Changes to be commit 已经纳入暂存区
git mv
删除+新文件
3.查看信息
git help
git log
查看提交日志☆ q退出
git log -5
显示最近五条 也可以格式化显示
git diff
比较不同状态的代码区别
git config
配置 配置保存在.git
文件夹config文件中
git config --list
查看配置列表
4.远程协作
git pull origin 分支名
git push origin 分支名
$ git push origin上面命令表示,将当前分支推送到origin主机的对应分支。 如果当前分支只有一个追踪分支,那么主机名都可以省略。
$ git push 如果当前分支与多个主机存在追踪关系,那么这个时候-u选项会指定一个默认主机,这样后面就可以不加任何参数使用git push。
$ git push -u origin master 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。
作者:51cf68e144ad
链接:https://www.jianshu.com/p/dd864fcee643
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
5.分支
git branch
# 列出所有本地分支
git branch -r
# 列出所有远程分支
git branch new_zjy_branch
创建新的分支(master创建分支,则当前版本和master的一致)
git branch --track new_branch_name origin/branch
# 新建一个分支,并且与远程的分支建立追踪关系
git checkout new_zjy_branch
切换分支
git checkout -b new_zjy_branch
创建并切换到该分支
git branch -d new_zjy_branch
删除分支 -D强制删除
git push oringin --delete [branch-name]
# 删除远程分支
git branch -dr [remote/branch]
# 删除远程分支2
(master)git merge new_zjy_branch
将new_zjy_branch上的修改合并到master上
git merge --no-ff new_zjy_branch
:—no-ff不使用fast-forward方式合并,保留分支的commit历史
git branch -a
查看本地分支列表
git branch -r
查看远程分支列表
git push origin 新分支名
向远程提交本地新开的分支
git fetch
上面命令将某个远程主机的更新,全部取回本地。
.gitignore文件
此文件放在项目根目录下
一些文件不需要加入到版本控制中,例如配置文件
忽视这种文件
标签管理
查看所有标签git tag
创建标签git tag name
制定提交信息git tag -a name -m "comment"
删除标签 git tag -d name
标签发布git push origin name
idea配置git https://www.cnblogs.com/hkgov/p/7694101.html
其他教程:
http://www.cnblogs.com/my-freedom/p/5701427.html
http://www.cnblogs.com/hebau-may/p/6382743.html
Gitflow工作流
当分支过多时 , 采用了Git Flow的模式管理这些分支
1.分支图(copy on others)
master
主分支 , 产品的功能全部实现后 , 最终在master分支对外发布
该分支为只读唯一分支 , 只能从其他分支(release/hotfix)合并 , 不能在此分支修改
1.1 初始化,自动创建develop分支 develop
git flow init
主开发分支 , 基于master分支克隆
包含所有要发布到下一个release的代码
该分支为只读唯一分支 , 只能从其他分支合并
2.2 功能分支 feature
功能开发分支 , 基于develop分支克隆 , 主要用于新需求新功能的开发
属于临时分支 , 功能完成后可选删除
git flow feature start featureName #开启新feature分支
git flow feature publish featureName #将feature分支push到远程
git flow feature pull origin featureName #拉取faetureName分支
git flow feature finish featureName #结束feature分支,自动删除
2.3 发布分支
release
测试分支 , 从develop分支克隆
git flow release start releaseName #开启新release分支
git flow release publish releaseName #将release分支push到远程
git flow release finish releaseName #结束release分支,自动合并,自动删除
2.4 维护分支
hotfix
补丁分支 , 基于master分支克隆 , 主要用于对线上的版本进行BUG修复
所有hotfix分支的修改会进入到下一个release
git flow hotfix start hotfixName #开启新hotfix分支
git flow hotfix finish hotfixName #结束hotfix分支,自动合并,自动删除
gitflow更详细文章 https://www.cnblogs.com/myqianlan/p/4195994.html