Git学习笔记
1.版本控制
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
分类:
- 本地版本控制:RCS
- 集中式版本控制:SVN、CVS、VSS
- 分布式版本控制:Git
区别 | Git | SVN |
---|---|---|
是不是分布式的 | 分布式的 | 集中式的 |
文件存储方式不同 | 内容按元数据方式存储,使用SHA-1 哈希算法 | 内容按文件存储 |
分支区别 | 可以在任意一个提交点(commit point)开启分支,并没有创建文件夹 | 分支是版本库中的另外一个目录。 |
是否有全局的版本号 | 没有 | 有 |
管理权限不同 | 没有严格的权限管理控制,只有账号角色划分 | 相当严格,可以按组、个人针对某个子目录的权限控制 |
工作流程不同 | 开始工作前进行fetch操作,完成开发工作后push操作,有冲突解决冲突。git的提交过程不会被打断,有冲突会标记冲突文件 | 每次更改文件之前都得update操作,有冲突,会打断提交动作 |
2.Git历史
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
3.Git环境配置
各个版本下载之后直接安装,配置环境变量。
Git一般工作流程如下:
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
工作区域划分:
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
4.Git基本命令
linux基本命令:
cd #切换目录
pwd #查看路劲
ls #查看目录
clear #清屏
等等。
git相关命令:
git config -l #查看所有配置
git config --system --list #查看系统配置
git config --global --list #查看当前用户配置,用户名和邮箱
设置用户名与邮箱:
git config --global user.name "Ferryup"
git config --global user.email "1723265689@qq.com"
git push origin master # 推到origin仓库的master分支
git push -u origin master # 将本地仓库的master与远程仓库进行关联,以后push就不用指定分支了。
git commit:是将本地修改过的文件提交到本地库中;
git push:是将本地库中的最新信息发送给远程库;
git pull:是从远程获取最新版本到本地,并自动merge;
git fetch:是从远程获取最新版本到本地,不会自动merge;
git merge:是用于从指定的commit(s)合并到当前分支,用来合并两个分支;
5.Git项目搭建
创建仓库的两种方式:本地仓库搭建、远程仓库搭建
本地仓库搭建
- 在当前目录右键打开git bash;
- 输入命令git init;
- 可以看到在目录下多了一个.git隐藏文件夹,关于版本的所有信息都在这个文件夹中。
远程仓库搭建
-
复制远程仓库的url;
-
在当前目录打开git bash,输入命令git clone url;
git clone https://github.com/MarkerHub/eblog.git git clone --depth=1 https://github.com/MarkerHub/eblog.git#保留最近的一次commit,克隆速度更快
-
等待之后即可把远程仓库克隆到本地。
6.Git常用操作
Git管理的文件的有四种状态
- 未跟踪的(Untracked):文件在文件夹中,但是没有加入到仓库中,不参与版本控制。
- 未修改的(Unmodified):
- 已修改的(Modified):修改了之后需要重新添加到仓库中。
- 已暂存的(Staged):暂存状态。
git add . #添加当前项目的所有文件
git commit -m "消息" #提交
-m参数:附带的消息
git status #查看所有文件状态,默认是较为详细的显示
git status -s #查看所有文件状态,默认是较为简洁的显示
git status 文件名 #查看指定文件的状态
git diff # 工作目录和暂存区
git diff --cached # 暂存区和本地仓库
git diff HEAD # 工作目录和本地仓库
git diff --stat # 显示信息摘要
git reset HEAD --file # 将本地仓库的当前版本恢复到暂存区
git reset HEAD~1 --file # 将本地仓库的上个版本恢复到暂存区
# git rm 用来删除文件、目录。git mv 命令用于移动或重命名一个文件、目录。
git rm # 将文件从暂存区和工作目录删除,-f为强制删除
git rm --cached <path> # 将文件从暂存区中删除
git mv <old_path> <new_path>
git log # 当前分支的log
git log --oneline # 简要log
git log --graph # 查看各种分支之间的日志
git reflog # 查看所有分支的所有操作记录(包括 reset)
git tag # 查看所有标签
git tag -a <tagname> -m "blablabla..." # 创建一个标签,并附上信息
git tag -d <tagname> # 删除本地标签
忽略文件
在代码目录下建立.gitignore文件。
#为注释
*.txt #忽略所有以.txt结尾的文件
!lib.txt #但是lib.txt除外
/temp #向前忽略,仅忽略项目根目录下的TODO文件,不包括其他目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #忽略doc/notes.txt,但不包括doc/server/arch.txt
*.class
*.log
*.lock
### Package Files ###
*.jar
*.war
*.ear
target/
tmp/
### idea ###
.idea/
*.iml
*.ipr
*.iws
.classpath
.project
.settings/
bin/
*velocity.log*
### STS ###
.apt_generated
.factorypath
.springBean
### rebel ###
*rebel.xml*
使用SSH免密登录
- 进入C:Usersqd.ssh 目录中,打开git bash窗口,输入命令 ssh-keygen
- 可以生成两个文件id_rsa.pub和id_rsa,将公钥id_rsa.pub里面的内容粘贴到网站上对应位置即可。
7.IDEA中集成Git
- 新建项目,绑定Git;
- 将远程的git文件目录拷贝到项目中即可。
- 修改文件,使用IDEA操作Git;
- 添加文件到暂存区。
- commit提交到本地。
- push到远程仓库。
- 提交测试。
8.Git分支
git branch #查看本地分支
git branch -r #查看远程分支
git branch dev #新建一个分支dev,但是依然停留在当前分支
git checkout -b dev #新建一个分支dev,并切换到dev分支
git branch -b dev #切换到dev分支
git merge dev #合并dev分支到当前分支
git branch -d dev #删除dev分支
git push origin --delete dev #删除远程dev分支
git branch -dr dev #删除远程dev分支
# 分支合并的三种方式
git merge fast-forword:当条件允许时,git 直接把 HEAD 指针指向合并分支的头(默认)
git merge --no-ff:不适用 fast-forward 方式合并,保留分支的 commit 历史
git merge --squash:使用 squash 方式合并,将多次分支的 commit 历史记录压缩为一次