1.git是什么呢?
维基百科给出的定义: git是一个分布式版本控制软件,最初由(Linus Torvalds)创作

什么是版本控制?
项目经理与程序员的恩怨情仇
企业真实案例:开发了a功能,之后项目所要改成b功能,开发完之后又要改c功能,最后又说还是用回a功能。
没有git等版本控制软件之前,如何做版本控制。
有了git之后,如何做版本控制。

2.git的作用是什么?
版本控制

3.git的优势哪里?
同类型软件有svn、cvs,git相比于他们最大的优势就在于git是分布式的
企业真实案例:svn服务器欠费,急需发版本。非常麻烦
Git 允许多个远程仓库存在,使得这样一种工作流成为可能:每个开发者拥有自己仓库的写权限和其他所有人仓库的读权限。 这种情形下通常会有个代表`‘官方’'项目的权威的仓库。 要为这个项目做贡献,你需要从该项目克隆出一个自己的公开仓库,然后将自己的修改推送上去。 接着你可以请求官方仓库的维护者拉取更新合并到主项目。 维护者可以将你的仓库作为远程仓库添加进来,在本地测试你的变更,将其合并入他们的分支并推送回官方仓库。

4.初始github
全球最大的同×××友网站:https://github.com/

5.git安装
windows下面安装git:
下载git
到git官网上下载,自行选择合适系统的: https://git-scm.com/
如果是win版本的,直接按默认安装即可

linux上安装,以centos 6.6为例:
yum命令安装:
yum install git
yum install 安装的git不是最新版本,如需最新版本需要自行编译

编译git源码安装:
到下面的网站下载合适的版本
https://mirrors.edge.kernel.org/pub/software/scm/git/
安装git的依赖项
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker
移除已经安装的git
yum remove git cd git 解压目录
预编译git
./configure --prefix=/usr/local/git_2.9.5
编译并安装git
make && make install
将git的脚本软连接到/usr/bin/ 目录下
ln -s /usr/local/git_2.9.5/bin/* /usr/bin/
git安装完成

6. git入门级命令

为什么建议使用命令行的方式操作git?
1.命令行会了,图形界面的操作时完全没问题的,反之,则不然
2.有些地方如linux服务器,没有图形界面,如果碰到问题需要使用git,不会命令行操作啥都干不了

git 本地操作
git --help
调出Git的帮助文档
git +命令 --help
查看某个具体命令的帮助文档
git --version
查看git的版本
git init 
生成空的本地仓库
git add
将文件添加到暂存区

初次commit之前,需要配置用户邮箱及用户名,使用以下命令:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
git commit 
将暂存区里的文件提交到本地仓库

git remote
用于管理远程仓库

git push -u origin master
往名字为origin的仓库的master分支上提交变更
git fetch
拉取远程仓库的变更到本地仓库
git merge origin/master
将远程的变更,合并到本地仓库的master分支
git pull
-- 不建议使用 等同于fetch之后merge

git的文件状态

git status
用于查看git的状态
git rm
用于git文件的删除操作
如果只是 git rm --cache 仅删除暂存区里的文件
如果不加--cache 会删除工作区里的文件 并提交到暂存区
git checkout
直接加文件名 从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖
加了【分支名】 +文件名 则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件

新建文件--->Untracked
使用add命令将新建的文件加入到暂存区--->Staged
使用commit命令将暂存区的文件提交到本地仓库--->Unmodified
如果对Unmodified状态的文件进行修改---> modified
如果对Unmodified状态的文件进行remove操作--->Untracked

git的图形化客户端

图形化客户端:sourcetree
下载:
https://www.sourcetreeapp.com/
安装:
由于种种不可描述的原因,无法注册账号且无法登陆所以需要绕过登陆
绕过登陆:
去到 C:\Users\当前用户目录\AppData\Local\Atlassian\SourceTree 目录下
新建 accounts.json 文件
将一下内容复制进去
[
{
"$id": "1",
"$type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity",
"Authenticate": true,
"HostInstance": {
"$id": "2",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount",
"Host": {
"$id": "3",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount",
"Id": "atlassian account"
},
"BaseUrl": "https://id.atlassian.com/"
},
"Credentials": {
"$id": "4",
"$type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account",
"Username": "",
"Email": null
},
"IsDefault": false
}
]

开发利器--git分支
1.什么是分支
软件项目中启动一套单独的开发线的方法
2.为什么使用git
1.可以很好的避免版本兼容开发的问题,避免不同版本之间的相互影响
2.封装一个开发阶段
3.解决bug的时候新建分支,用于对该bug的研究
3.git中跟分支相关的命令
git branch 分支名
git branch 不加任何参数,列出所有的分支,分支前面有*号,代表该分支为当前所在分支

  • 创建分支的时候,分支名不用使用特殊符号
    git branch -d 分支名 
    *不能删除当前所在的分支
    git branch -m 旧分支名 新分支名

    git checkout 分支名 切换分支
    如果在分支上面对文件进行修改之后,没有commit就切换到另外一个分支b,
    这个时候会报错,因为没有commit的文件在切换分支之后会不覆盖。所以Git 报错提示。

    git checkout -f 分支名 强制切换到分支,如果当前有为提交的变更,会直接丢弃
    -f 参数一定一定要非常非常小心使用,一般情况下不建议使用,除非真的要强制去执行

追根溯源--git log

log命令的作用:
用于查看git的提交历史
git log命令显示的信息的具体含义
commit 4a70ceb24b6849ad830d6af5126c9227b333d2d1 --SHA-1 校验和 commit id
Author: wiggin <wiggin@gmail.com> --作者跟邮箱概要信息
Date: Wed May 16 23:51:02 2018 +0800 --提交时间

v2  --commit的时候,使用-m选项说写一段概要说明
日常在使用commit的时候,-m选项所写得内容一定不能随便写
“修改了登陆的bug”--》“新增用户管理中心”

git log -数字 表示查看最近几次的提交
git log -p -2 显示最近两次提交的不同点
git log --author 查看具体某个作者的提交 
git log --online 输出简要的信息
git log --graph 以一个简单的线串联起整个提交历史
git log 输出信息的定制

**文件对比利器--git diff

diff -->difference的缩写,用于比较差异
使用场景:
1、解决冲突
2、制作补丁
git diff 不加任何参数 用于比较当前工作区跟暂存区的差异
git diff --cached 或者--staged
git diff HEAD
git diff 分支名 查看当前分支跟指定的分支的差异
git diff 分支名1 分支名2 查看两个指定分支(已提交的)的差异,分支2 跟分支1的差别
git diff 文件名 查看指定文件的差异
git diff commitid1 commitid2 用于列出两个历史提交的差异
git diff --stat 用于罗列有变更的文件 diff --git a/file2 b/file2 file2的两个版本
index c200906..29e2b3c 100644
--- a/file2 表示变更前的文件
+++ b/file2 表示当前文件
@@ -1 +1,2 @@ 变更前的文件的第一行 变更之后的文件的第一行往下两行 这块文件区域有差异
222
+111 +表示新增了一行 -表示删除了一行 如果对一行内容进行修改,在此处体现出来的就是先删除一行,再新增一行 diff --git a/file2 b/file2
index 29e2b3c..2e2f5e4 100644
--- a/file2
+++ b/file2
@@ -1,2 +1,3 @@
222
+333
111

git更改提交

1.将不必要的文件add
2.上次提交觉得是错的
3.不想改变暂存区内容,只是想调整提交的信息
4.版本回滚

git reset HEAD 文件名 移除不必要的添加到暂存区的文件
git reset HEAD^ 或者 commitid 去掉上一次的提交 
git reset --soft HEAD^ 修改上次提交的信息吧即commit -m "修改这里的内容"

git reset --soft 只是将HEAD引用指向指定的提交,工作区跟暂存区的内容不会改变
git reset --mixed (默认选项)将HEAD指向指定的提交,暂存区的内容随之改变,工作区内容不变
git reset --hard 将HEAD指向指定的提交,暂存区跟工作区都会改变

第十四讲--gitignore

为什么要使用.gitignore 文件
大量与项目无关的文件全推到远程仓库上,同步的时候会非常慢,且跟编辑器相关的一些配置推上去之后,别人更新也会受其影响。所以,我们使用该文件,对不必要的文件进行忽略,使其不被git追踪

一把情况下,.gitignore文件,在项目一开始创建的时候就创建,并推送到远程服务器上。这样大家初次同步项目的时候,就是用到该文件,避免以后,团队成员把与项目无关的文件,传到远程服务器上

.log 表示忽略项目中所有以.log结尾的文件
123?.log 表示忽略项目中所有以123加任意字符的文件
/error.log 表示忽略项目中根目录中的error.log 这个文件
src/main/test/
 表示忽略/src/main/test/目录下的所有文件
*.class 
**/java/ 匹配所有java目录下的所有文件
!/error.log 表示在之前的匹配规则下,被命中的文件,可以使用!对前面的规则进行否定

对于已经提交到远程或本地仓库的文件,.gitignore配置之后不会生效。我们必须先删除本地暂存区里的文件,之后在加上.gitignore 文件,最后再把变更提交到远程仓库上。
git rm --cached 文件名 从暂存区删除某个文件
git rm -rf --cached 文件夹 表示递归删除暂存区该文件夹的所有东西

落叶归根--分支合并及冲突解决

之前我们是使用branch 命令创建分支
使用checkout在不同分支之间切换,但是落叶终究要归根,分出去的枝叶也终究要汇总

这个时候我们可使用merge命令进行分支的合并

冲突与解决
master分离出dev分支,对a文件修改后提交,之后跑到master分支,也对a修改后提交,之后merge dev分支,此时冲突产生
git diff --name-only --diff-filter=U 查看冲突的文件
git ls-files -u 也可以显示没被合并的文件
之后使用vim对文件进行修改或者直接用开发工具进行修改

更多学习资料可查看
https://xdclass.net/html/sort.html

如需针对此内容进行深入了解可查看
Jenkins持续集成视频教程Git

最新文章

  1. Android图片缓存之Bitmap详解
  2. 在 Mac OS X 终端里使用 Solarized 配色方案
  3. Ubuntu 16.04.1下修改MySQL默认编码
  4. Ext JS 6 新特性和工具
  5. 【转】说说如何使用unity Vs来进行断点调试
  6. 想直接用Windows API开发程序,你真的应该知道这些!
  7. 写个 Hello World 而已,要不要这么震撼?!
  8. cf B. I.O.U.
  9. linux 切换用户之后变成-bash-x.x$的解决方法
  10. Hadoop学习历程(一、编译)
  11. javaWeb学习总结(1)- Tomcat服务器学习和使用(3)
  12. Node.js和html数据交互(一) form表单
  13. Jquery计算时间戳之间的差值,可返回年,月,日,小时等
  14. Matlab基础部分1
  15. 关于er模型中的identifying relationship or non-identifying relationship
  16. 餐巾计划问题 zwk费用流解法
  17. mysql实现自增函数
  18. ICS 组件 for lazarus 1.0.12
  19. python.csv 按行按列读取
  20. Oracle SQL部分练习题

热门文章

  1. Keepalived + Nginx + Tomcat 高可用负载均衡架构
  2. hutool java工具架包功能介绍
  3. mysql主从复制之同步部分库表
  4. LeetCode 233 Number of Digit One 某一范围内的整数包含1的数量
  5. (转)linux下文件删除的原理精华讲解(考试题答案系列)
  6. 网络爬虫之记一次js逆向解密经历
  7. jackson简单使用案例
  8. 实现多行文字居中方法(兼容IE6)
  9. Java调用SQL Server的存储过程详解(转)
  10. VS2017无法进入断点调试且移动到breakpoint上的时候报错“breakpoint will not currently be hit. the source code is different from original version. ”