两者区别

  1. 最核心的区别Git是分布式的,而Svn不是分布的。
  2. Git把内容按元数据方式存储,而SVN是按文件
  3. git离线可查看原来版本和log

git 分布式版本控制系统

下载git地址
mac下载并使用
git 链接远程仓库

为什么使用 git

  • 完整的版本控制功能,解决多人协作问题
  • 提高开发效率

状态:已修改—>已暂存—>已提交
每次提交都有一个摘要值
版本控制-svn_git - 图1

针对所有仓库
执行命令git config --global user.name "你的用户名",告诉git你的名字,这个用户名会出现在提交记录中
执行命令git config --global user.email "你的邮箱",告诉git你的邮箱

  1. ssh -T git@github.com

命令

创建SSHkey ssh-keygen -t rsa -C "your_email@example.com"

拉取、上传免密码:

  1. git config —global user.name “”
  2. git config —global user.email “”

分支操作:

  1. git branch 创建分支
  2. git branch -b 创建并切换到新建的分支上
  3. git checkout 切换分支
  4. git branch 查看分支列表
  5. git branch -v 查看所有分支的最后一次操作
  6. git branch -vv 查看当前分支
  7. git brabch -b 分支名 origin/分支名 创建远程分支到本地
  8. git branch —merged 查看别的分支和当前分支合并过的分支
  9. git branch —no-merged 查看未与当前分支合并的分支
  10. git branch -d 分支名 删除本地分支
  11. git branch -D 分支名 强行删除分支
  12. git branch origin :分支名 删除远处仓库分支
  13. git merge 分支名 合并分支到当前分支上

暂存操作:

  1. git stash 暂存当前修改
  2. git stash apply 恢复最近的一次暂存
  3. git stash pop 恢复暂存并删除暂存记录
  4. git stash list 查看暂存列表
  5. git stash drop 暂存名(例:stash@{0}) 移除某次暂存
  6. git stash clear 清除暂存

回退操作:

  1. git reset —hard HEAD^ 回退到上一个版本
  2. git reset —hard ahdhs1(commit_id) 回退到某个版本
  3. git checkout — file撤销修改的文件(如果文件加入到了暂存区,则回退到暂存区的,如果文件加入到了版本库,则还原至加入版本库之后的状态)
  4. git reset HEAD file 撤回暂存区的文件修改到工作区

标签操作:

  1. git tag 标签名 添加标签(默认对当前版本)
  2. git tag 标签名 commit_id 对某一提交记录打标签
  3. git tag -a 标签名 -m ‘描述’ 创建新标签并增加备注
  4. git tag 列出所有标签列表
  5. git show 标签名 查看标签信息
  6. git tag -d 标签名 删除本地标签
  7. git push origin 标签名 推送标签到远程仓库
  8. git push origin —tags 推送所有标签到远程仓库
  9. git push origin :refs/tags/标签名 从远程仓库中删除标签

常规操作:

  1. git push origin test 推送本地分支到远程仓库
  2. git rm -r —cached 文件/文件夹名字 取消文件被版本控制
  3. git reflog 获取执行过的命令
  4. git log —graph 查看分支合并图
  5. git merge —no-ff -m ‘合并描述’ 分支名 不使用Fast forward方式合并,采用这种方式合并可以看到合并记录
  6. git check-ignore -v 文件名 查看忽略规则
  7. git add -f 文件名 强制将文件提交

git创建项目仓库:

  1. git init 初始化
  2. git remote add origin url 关联远程仓库
  3. git pull
  4. git fetch 获取远程仓库中所有的分支到本地

忽略已加入到版本库中的文件:

  1. git update-index —assume-unchanged file 忽略单个文件
  2. git rm -r —cached 文件/文件夹名字 (. 忽略全部文件)

取消忽略文件:

  1. git update-index —no-assume-unchanged file

1. 获得版本库

git init初始化本地仓库
git clone 克隆远程仓库到本地

版本控制-svn_git - 图2

2. 版本管理

git status 查看当前分支并查看状态 (Initial commit初始提交—>已修改状态)
git add 将已修改的文件纳入暂存区中 —->已暂存状态

git rm file 从文件目录中删除文件纳入暂存区
rm与上删除类似,需要add
版本控制-svn_git - 图3
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

  1. git flow init

主开发分支 , 基于master分支克隆
包含所有要发布到下一个release的代码
该分支为只读唯一分支 , 只能从其他分支合并
版本控制-svn_git - 图4

2.2 功能分支 feature

功能开发分支 , 基于develop分支克隆 , 主要用于新需求新功能的开发
属于临时分支 , 功能完成后可选删除

  1. git flow feature start featureName #开启新feature分支
  2. git flow feature publish featureName #将feature分支push到远程
  3. git flow feature pull origin featureName #拉取faetureName分支
  4. git flow feature finish featureName #结束feature分支,自动删除

版本控制-svn_git - 图5

2.3 发布分支

release
测试分支 , 从develop分支克隆

  1. git flow release start releaseName #开启新release分支
  2. git flow release publish releaseName #将release分支push到远程
  3. git flow release finish releaseName #结束release分支,自动合并,自动删除

版本控制-svn_git - 图6

2.4 维护分支

hotfix
补丁分支 , 基于master分支克隆 , 主要用于对线上的版本进行BUG修复
所有hotfix分支的修改会进入到下一个release

  1. git flow hotfix start hotfixName #开启新hotfix分支
  2. git flow hotfix finish hotfixName #结束hotfix分支,自动合并,自动删除

版本控制-svn_git - 图7
gitflow更详细文章 https://www.cnblogs.com/myqianlan/p/4195994.html

sourceTree使用