一,基本概念
1.简介
Git是目前世界上最先进的分布式版本控制系统
git是林大神开发的。
2.git的作用
3.git的工作机制
工作区 git add 文件
暂存区 git commit
本地版本库
4.仓库的概念
本地仓库
:是在开发人员自己电脑上的Git仓库。
远程仓库
:是在远程服务器的Git仓库。
好处:跨团队协作
团队内协作
操作:
clone
:克隆,就是将远程仓库复制到本地
push
:推送,就是将本地仓库代码上传到远程仓库
`pull`:拉取,就是将远程仓库代码下载到本地仓库
`Commit`:提交,就是将本地工作区代码上传到本地仓库中
优点:
容灾能力强
本地版本管理
异地协作
灵活分支
二,安装与配置
1.安装
其他的全都无脑下一步就可以。
选择Git命令执行环境
第一种是不和windows的dos窗口混合在一起。
Configuring the line ending conversions
第一个选项:如果是跨平台项目,在windows系统安装
第二个选项:如果是跨平台项目,在Unix系统安装
第三个选项:非跨平台项目
新功能,不稳定,不勾选。
2.配置
1.整一个Git的工作空间
在任意的文件目录下,右键都可以开打Git的命令行窗口——Git Bash Here
2.设置用户名和用户邮箱
git config --global user.name "用户名"
git config --global user.email "用户邮箱"
--global
表示全局属性,所有的git项目都会共用属性
查看配置信息:git config --list
在当前登录的系统用户路径下,生成~/.gitconfig
隐含文件,里面可以看到刚刚设置的信息。如果不用命令设置,也可以直接打开文件进行设置。
3.相关概念
工作区:包含.git的目录
版本库:.git目录
暂存区:.git/index
分支: Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
4.提交git版本库
1.提交缓存区
git add 文件名
2.提交版本库
git commit
需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。一旦提交完后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。即:nothing to commit (working directory clean)。因为在缓存区没有版本的概念,但是提交到本地版本库就有了版本的概念。
3.其他操作
①用git diff HEAD -- filename
命令可以查看工作区和暂存区里面最新版本的区别。
②新建过撤销未add: git checkout -- 文件名
③撤销已add未commit:先git reset HEAD 文件名
,再 git checkout -- 文件名
④撤销已add已commit:git reset --hard HEAD^
三,git实战
命令名称 | 命令作用 |
git init | 初始化本地库 |
git config --global user.name 用户名 | 设置用户签名的用户名部分 |
git config --global user.email 邮箱 | 设置用户签名的邮箱部分 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
基本操作
#初始化git工作目录git init
#创建一个文件vim a.txt
#存入本地暂存区git add a.txt
#存入本地版本库git commit
#对a.txt文件进行修改vim a.txt
#对修改后的a.txt重新存入暂存区git add a.txt
#对修改后的a.txt重新放入本地版本库git commit
#查看修改历史git log
#查看文件状态git status
#查看文件状态并格式化git status -s
#撤销暂存区的文件git reset a.txt
#提交并直接加上注释内容git commit -m "注释内容"
说明
git status
On branch master
:表示主分支
Untracked files
:表示未跟踪状态
Git工作目录下的文件状态信息:
Untracked
未跟踪(未被纳入版本控制)
Tracked
已跟踪(被纳入版本控制)
Unmodified
未修改状态
Modified
已修改状态
Staged
已暂存状态
这些文件的状态会随着我们执行Git的命令发生变化
红色
表示新建文件或者新修改的文件,都在工作区.
绿色
表示文件在暂存区
新建的文件在工作区,需要添加到暂存区并提交到仓库区
也可以使用git status –s
使输出信息更加简洁
??
: 表示未跟踪状态
查看日志
git log
git log a.txt
查看文件日志
git log --pretty=online
一行显示
git reflog
查看历史操作
回退
git reset --hard HEAD
一次回退一个版本,一个^代表一个版本数量
git reset --hard HEAD~n
回退n个版本
版本穿梭
git reflog a.txt
查看历史操作
git reset --hard 版本号
回到最新版本
撤销
未add,未commit
vim修改文件,没有add和commit,进行撤销
命令:
git checkout -- a.txt
撤销修改(还原原来的文件)
已add,未commit
vim修改文件,添加add,但没提交commit,进行撤销
命令:
git add a.txt
`git reset`
删除
① 手动拷贝图片java.jpg到工作空间目录,并查看目录列表:ls -l
② 添加:git add java.jpg
③ 提交:git commit -m "新建图片" java.jpg
④ 删除图片:rm java.jpg
⑤ 添加:git add java.jpg
⑥ 提交:git commit -m "新建图片" java.jpg
⑦ 回退:git reset --hard HEAD^
⑧ 文件不是被删除了吗?怎么又回来啦!呵呵…
⑨ 处处留痕:git reflog
分支
1.分支概念
在使用版本控制工具开发的过程中,同时推进多个任务
2.分支的好处
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
3.分支操作
命令名称 | 作用 |
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
4.创建分支和切换分支图解
master、hotfix
其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD
决定的。
HEAD
如果指向master
,那么我们现在就在master
分支上。
HEAD
如果指向hotfix
,那么我们现在就在hotfix
分支上。
所以切换分支的本质就是移动HEAD指针。
5.在两个不同分支分别做不同修改并合并到主分支图解
合并分支时一定是涉及到两个分支。这两个分支一个是“当前所在分支”,一个是“目标分支”。
所以分支合并命令的本质就是把“目标分支”合并到“当前分支”。
版本冲突
如上图所示,我们的分支合并的时候产生了冲突。
1.冲突产生的原因
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容。
2.冲突的解决
编辑有冲突的文件,删除特殊符号,决定要使用的内容
添加到暂存区
执行提交(注意:使用git commit命令时不能带文件名)
3.避免冲突
养成良好的操作习惯,先pull
在修改,修改完立即commit
和push
一定要确保自己正在修改的文件是最新版本的
各自开发各自的模块
如果要修改公共文件,一定要先确认有没有人正在修改
下班前一定要提交代码,上班第一件事拉取最新代码
一定不要擅自修改同事的代码
四,github远程库实战
目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上。
项目的发起者记得邀请一个项目的合作者来协同开发收到邮件以后点击进入,然后就可以协同开发。
配置git忽略文件
位置:用户家目录下
1.创建忽略规则文件
git.ignore
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
2.在.gitconfig文件中引用忽略规则文件
[user]
name = root
email = 1972039773@qq.com
[core]
excludesfile = C:\Users\Administrator\git.ignore
IDEA集成git
1.配置idea的git
2.初始化本地仓库
3.添加到暂存区
4.提交到本地仓库
5.创建分支
6.切换分支
7.合并分支
8.解决冲突
1.冲突的产生
仍然是同一个文件在同一个位置有不同内容。
2.合并分支
3.看到冲突提示
这里可以直接点Accept Yours
或者Accept Theirs
来解决冲突。这代表完全使用我们的内容或完全使用他们的内容。
如果我们想要详细修改冲突内容则点击Close
。此时IDEA会提示Resolve
4.点击resolve
然后提交本地库就好了。
在IDEA中集成github
1.保存github账号
2.分享到github
3.克隆
4.push
5.pull
git推送马云
#git本地库关联马云
git remote ADD origin https://gitee.com/yin_huidong/java_learning_notes.git
#git 将本地版本库推送到远程库
git push https://gitee.com/yin_huidong/java_learning_notes.git MASTER
五,git项目实战
1.gitLab配置ssh
1.本地生成ssh公钥
本机执行如下git命令:
ssh-keygen -t rsa -C "1972039773@qq.com"
执行以后,在本机当前用户的家目录下会生成.ssh文件夹
2.复制里面的公钥,并登录gitlab(这里以码云为例)
2.从远程库拉取代码到本地
3.创建自己的开发分支
此时就已经切换到了你创建好的dev分支。
4.在dev分支编码后并提交到远程库
5.将dev分支的代码合并到主分支