Git vs SVN
-
Git是分布式的,SVN是集中式的
-
Git复杂概念多,SVN简单易上手
-
Git分支廉价,SVN分支昂贵
git命令相对多一些, 所以功能也意味着多一些, 用惯了git的话, 一定回不去SVN!
git安装略! 友友们可以在网上找到很多教程!
git基本概念:
- 版本库
当你一个项目到本地或创建一个 git 项目,项目目录下会有一个隐藏的 .git 子目录。这个目录是 git 用来跟踪管理版本库的,千万不要手动修改。
- 哈希值
用来发现被git管理的文件状态!
- 文件状态
已修改(modified) - 已修改表示修改了文件,但还没保存到数据库中。
已暂存(staged) - 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交(committed) - 已提交表示数据已经安全的保存在本地数据库中。
- 工作区域
- 工作区(working) - 当你 git clone 一个项目到本地,相当于在本地克隆了项目的一个副本。工作区是对项目的某个版本独立提取出来的内容。这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
- 暂存区(staging)- 暂存区是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。有时候也被称作 `‘索引’',不过一般说法还是叫暂存区。
- 本地仓库(local) - 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 本地仓库。
- 远程仓库(remote) - 以上几个工作区都是在本地。为了让别人可以看到你的修改,你需要将你的更新推送到远程仓库。同理,如果你想同步别人的修改,你需要从远程仓库拉取更新。
- 分支(branch):
分支是为了将修改记录的整个流程分开存储,让分开的分支不受其它分支的影响,所以在同一个数据库里可以同时进行多个不同的修改
主分支(Master)前面提到过 master 是 Git 为我们自动创建的第一个分支,也叫主分支,其它分支开发完成后都要合并到 master
- 标签(Tag)
标签是用于标记特定的点或提交的历史,通常会用来标记发布版本的名称或版本号(如:publish/0.0.1),虽然标签看起来有点像分支,但打上标签的提交是固定的,不能随意的改动,参见
- HEAD
HEAD 指向的就是当前分支的最新提交图片
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
Git 的命令实在太多了,日常工作需要掌握add,commit,status,fetch,push,rebase等,若要熟练掌握
掌握rebase和merge的区别,fetch和pull的区别等
常用git操作
git merge --no-ff和git merge之间不同的区别详解戳这里
常用命令:
# 克隆一个已经创建的远端仓库
# 通过 SSH
$ git clone ssh://user@domain.com/repo.git
#通过 HTTP
$ git clone http://domain.com/user/repo.git
# 新建一个本地仓库
$ git init
# 工作区 -> 暂存区
$ git add <file/dir>
# 暂存区 -> 本地仓库
$ git commit -m "some info"
# 本地仓库 -> 远程仓库
$ git push origin master # 本地master分支推送到远程origin仓库
# 工作区 <- 暂存区
$ git checkout -- <file> # 暂存区文件内容覆盖工作区文件内容
# 暂存区 <- 本地仓库
$ git reset HEAD <file> # 本地仓库文件内容覆盖暂存区文件内容
# 本地仓库 <- 远程仓库
$ git clone <git_url> # 克隆远程仓库
$ git fetch upstream master # 拉取远程代码到本地但不应用在当前分支
$ git pull upstream master # 拉取远程代码到本地但应用在当前分支
$ git pull --rebase upstream master # 如果平时使用rebase合并代码则加上
# 工作区 <- 本地仓库
$ git reset <commitid> # 本地仓库覆盖到工作区(保存回退文件内容修改)
$ git reset --mixed <commitid> # 本地仓库覆盖到工作区(保存回退文件内容修改)
$ git reset --soft <commitid> # 本地仓库覆盖到工作区(保留修改并加到暂存区)
$ git reset --hard <commitid> # 本地仓库覆盖到工作区(不保留修改直接删除掉)
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提 交!
master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建 的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上 来。
idea中的git基本使用:
在idea中基本使用:
情况一(从远端clone代码):
- 第一步从远程clone代码:
- 然后就可以常用操作了
- 如果想要本地新建分支, 就直接new一个分支就行
命名遵循命名规范就行
单击相关分支, 可以进行更多操作!
- 下拉代码时会出现:
一般就选第一个就行了!
Merge还是Rebase戳这里
在提交到本地仓库后, 就不要下拉rebase代码了,
如果想要更详细的命令, 就可以看这个三年 Git 使用心得 & 常见问题整理
对开发命令详解全网最全的 Git 分支开发规范手册