Git 命令
1.版本控制工具。
1.1本地版本控制系统
1.2集中化版本控制系统
CVS,Subversion(svn) +以及 Perforce
问题:单点故障和磁盘损坏、数据丢失等问题
1.3分布式版本控制系统
Git,Mercurial,Bazaar 以及 Darcs
Git项目主要由工作区、暂存区和Git仓库(本地库)三部分组成,
工作区存放原始文件、暂存区存放要提交的文件、本地库存放要远程的文件
2.windows安装Git
官网(https://git-scm.com/downloads)
下载需要的版本文件
首次安装需要设置用户名,邮箱
git --version 查看版本信息
git config --global user.name "your_username" 设置用户名
git config --global user.email your_email@domain.com 设置用户邮箱
git config --list 查看所有配置
git config --global 同步配置到本机上的所有Git仓库,也可以对不同的仓库指定不同的用户名和email
Git三种状态:
状态 | 描述 |
---|---|
已提交(committed) | 已提交表示数据已经安全的保存在本地数据库中。 |
已修改(modified) | 已修改表示修改了文件,但还没保存到数据库中。 |
已暂存(staged) | 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。 |
Git工作区域:
分类 | 描述 |
---|---|
工作区 | 简单的理解为在电脑里能看到的目录,比如自己创建的本地项目目录 |
暂存区 | Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git自动创建的第一个分支master,以及指向master的一个指针叫HEAD。 |
Git仓库 | 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 |
Git 基本工作流程描述:
- 在工作区中修改某些文件。
- 对修改后的文件进行快照,然后添加到暂存区。
- 提交更新,将保存在暂存区域的文件快照永久转储到 Git 仓库中。
执行流程图:
3.创建版本库并提交文件
git init 初始化本地仓库
git status 查看工作目录与暂存区文件状态
git add <path> 添加文件到暂存区 <path> 可以是文件也可以是路径
git commit -m “说明” 加入本次提交的记录说明 方 便后续查看提交或改动记录
git log 显示提交日志信息
4.时光穿梭机
4.1 修改文件与文件提交
对项目不同版本的文件进行查看,项目历史版本,未来版本的切换操作。
git status 可以看到git 检测到文件被修改
git add 执行添加操作命令
git commit -m "说明" 执行提交
git diff HEAD -- 文件 与版本库内容进行比较
git reset HEAD 文件
"差异比较说明
---
:表示变动前的文件
+++
:表示变动后的文件
变动的位置用两个@作为起首和结束
@@ -1,2 +1,3 @@:减号表示第一个文件,“1"表示第1行,“2"表示连续2行。同样的,”+1,3"表示变动 后,成为第二个文件从第1行开始的连续3行。”
4.2 版本回退
git reset 命令用于将当前HEAD复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit等)。
git log 查看提交历史记录 包括用户名、邮箱、时间、文件编号
git log --pretty=oneline 简化输出
cat 文件 查看文件内容
git reset --hard HEAD^ 回退到上一版本
git reset --hard HEAD~版本 回退到上n版本
git reset 对应版本唯一标识符 可完成回到未来版本的操作
git reflog 查看记录在本地的HEAD和分支引用在过去指向的位置
HEAD^:将指针指向上一个版本,如果是上上一个就是 HEAD^,上上上一个HEAD^^,但这样记就比较 麻烦,如果回退版本较多,简写为 HEAD~100 往前回退100个版本 ~后跟数字即可。
4.3 文件删除
git status 命令可以看到Git 能够追踪到文件被删除情况,注意此时版本库中文件并没有被删除,只是工作目录中文件被删除
git checkout -- 文件名 还原文件
git rm 文件名 执行删除操作
5.远程仓库
Git 远程仓库,GitHub(https://github.com/ )是比较知名的一个,目前已被微软收购,
而国内比较知名的当属码云(https://gitee.com/ )了,
公司出于安全有自己的Git远程仓库
克隆远程项目到本地
在指定磁盘目录下,执行下列命令
git clone (sshcode相应复制地址)
6.Git分支操作
git checkout branch 切换到指定分支
git checkout -b new_branch 新建分支并切换到新建分支
git branch -d branch 删除指定分支
git branch 查看所有分支, 并且*号标记当前所在分支
git merge branch 合并分支
git branch -m | -M oldbranch newbranch 重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命名,否则,使用-m进行重命名。
7.分支Push与Pull操作
git branch -a 查看本地与远程分支
git push origin branch_name 推送本地分支到远程
git push origin :remote_branch 删除远程分支(本地分支还在保留)
git checkout -b local_branch origin/remote_branch 拉取远程指定分支并在本地创建分支
8.标签管理
git tag tag_name 新建标签 默认为HEAD
git tag -a tag_name -m 'xxx' 添加标签并指定标签描述信息
git tag 查看所有标签
git tag -d tag_name 删除一个本地标签
git push origin tag_name 推送本地标签到远程
git push origin --tags 推送全部未推送过的本地标签到远程
git push origin :refs/tags/tag_name 删除一个远程标签
9.分支操作冲突与解决
9.1本地分支操作冲突
不同分支提交相同的文件内容,合并时会产生冲突
cat 冲突文件名 查看冲突文件内容
git log --graph --pretty=oneline 查看分支合并图
冲突符号内容:
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
<<<<<<< HEAD 当前git 指向分支
======= 分离不同分支修改的内容
>>>>>>> leaf01 leaf01 与 master 在git01.txt 同一行同时出现了修改操作
这里git 是不允许 发生的
解决方法
(实际开发视情况而定 可以将内容合并为一行暂存,修改)
9.2 多人协同操作冲突
用户推送的文件与当前客户端推送内容存在冲突
此时解决方式Git 已有对应提示 Push 之前先执行Pull 操作
将远程文件拉取到本地 解决完冲突后再次执行Push 操作
先执行Pull 拉取操作
查看冲突文件内容
可以本地先处理冲突 将文本进行合并 然后提交 在 push 操作即可