一.Git基本介绍
-
什么是Git, 为什么需要使用Git?
Git是一个分布式版本控制系统,用于不同版本之间的代码管理。有了Git就可以多个人共同去操作同一份代码,避免的传统的文件与文件之间的拷贝。 -
Git VS SVN
SVN: 传统的集中化版本控制,所有的数据都会统一存放在中央仓库,一旦中央仓库挂了,就会导致所有数据的丢失,安全性不高.而客户端也只会存储最新版本的数据,所以中央仓库挂了,也没法恢复数据.
Git: 分布式的版本控制,中央仓库的所有数据都会拷贝一份到本地仓库,所以一定中央仓库挂了,就可以用某个本地仓库中的数据来进行备份,数据不会丢失。
3.Git中文件的两种状态
1). 已追踪
a. 已提交或未修改(Unmodified):已提交是指用户执行了commit命令把数据提交到了本地数据库,未修改是指checkout到当前工作目录之后未对该文件进行任何修改
b. 已修改(modified): 表示修改了文件,但还没保存到数据库中
c. 已暂存(staged):已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中2).未追踪
主要指那些新添加的并且还没有通过add命令添加到暂存区的文件
二.基础操作实例
在这个例子中我们将介绍从远程仓库克隆数据并对其进行修改最后将数据进行提交到远程仓库
1.去到要存放项目的路径下,邮件git bash
2.将远程仓库代码克隆到本地
3.进入git项目并新加test.txt
4.通过git status查看状态
可以看到test.txt文件处于Untracked状态,跟我们上面的状态表是相对应的
5.通过git add命令使test.txt文件从untracked状态转为Stagged状态
6.通过git status -s查看test.txt状态
此处使用git status -s进行查看,因为如果用git status我们看很难看出是stagged状态
左边的状态显示主要有以下几种状态(具体大家可以自行测试)
A: 新添加到暂存区(Stagged)的文件
M: 右边M,表示文件被修改了但是还没有去到暂存区(Stagged)
M : 左边M,表示文件被修改了并且已经去了暂存区(Stagged)
MM: 在工作区被修改并提交到暂存区后又在工作区中被修改了
??: 新添加的未跟踪(untracked)文件
7.通过git commit将文件从暂存区保存到本地数据库
8.通过git push将本地修改推送到远程仓库
三.分支操作
1.了解分支之前,我们先要知道Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照
- git分支结构
从以下图片可知道,分支master和v1.0当前都指向Snapshot C,并,且当前我们的工作区域处于master分支。当我们对master进行文件修改,然后代码提交到本地数据库之后,我们就会生成一个新的快照如Snapshot D, 这时候我们的master分支指针就会指向Snapshot D(见第二个图)
3.分支常见操作
1)创建分支
git branch [new_branch_name]
2)分支切换
git checkout [branch_name]
3)分支合并
git merge [merge_branch]
4.常用生产环境分支的例子
- 当前处于master分支,已经有过一些代码提交记录,同时master分支用于线上代码部署
- 创建一个新的分支iss53用于做某一个新功能
git branch iss53
git checkout iss53 - 然后在iss53分支上进行了新的代码提交,状态如下
- 此时发现线上有bug,需要新添加一个hotfix分支,同时进行了新的代码修改并提交到hotfix分支,并进行各种测试
5)对hotfix分支的测试通过,此时需要将hotfix分支的代码合并到master分支上然后部署到生产环境
git checkout master
git merge hotfix
6)此时可以删除hotfix分支
git branch -d hotfix
7)将master分支推送到远程仓库
git push origin master
三.常用命令
1.git init //将项目初始化未git项目
2.git clone [Url ] //从远程仓库克隆代码到本地
3.git add [file] //将文件从Untracked转为Staged状态或者从Modified状态转为Stagged状态
4.git commit -m “[tye in the commit message]” //将快照文件加入到本地的版本控制
5. git diff [file] //对比快照与当前缓存的修改记录
6. git reset [file] //将文件从Staged转为untracked状态
7. git branch //列举当前仓库的所有本地branch
8. git status //列举当前工作区域处于Untracked,Modified和Stagged状态的所有文件
9. git checkout [branch name] //切换本地仓库的工作分支
10. git push [remote-name] [branch-name] //将本地修改推送到远程仓库
11. git pull //从远程仓库拉取最新代码
四.其他操作
1.如何把一些不想上传的文件忽略,如class文件
添加.gitignore文件,然后把要忽略的文件加进去即可