Git版本控制工具
一.简介
1、git是一款分布式的版本控制工具,使用git每台本地主机都可以作为一个本地库,每个本地库可实现资源的相互共享,也可以把本地库的资源推送到远程仓库中(码云、github),不同本地库可以作为一个节点,允许有多个节点之间实现资源共享,避免了单点故障。
2、与SVN区别在于,SVN是集中式版本控制,SVN没有本地仓库,每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据,并且必须联网,很容易出现单点故障,而git则可以实现分布式,每台主机都有一个本地仓库,每个本地仓库都可以做为一个服务器节点,可以保存文件修改版本,推送远程仓库进行更新,避免了单点故障的出现!
版本集中式管理(SVN)
版本分布式管理(git)
二、git命令
- 初始化git本地仓库(进入代码资源目录)
git init
- 暂未提交缓存区状态
- 把工作区中文件提交到暂存区
git add . #表示所有文件提交暂存区
git add [fileName] #指定文件提交暂存区
- 已提交暂存区状态
- 查看文件状态
git status
- 把文件提交到本地仓库
git commit -m "[提示信息]" #提交所有的暂存区文件到本地仓库
git commit [fileName] -m "提示信息" #提交暂存区指定文件到本地仓库
- 查看本地仓库存在所有的文件
git ls-files
- 查看未关闭窗口下的所有历史版本
git log #显示所有历史提交版本的详细信息
git log --pretty=oneline #显示所有历史提交版本的第一行信息
- 查看最近所有的历史版本信息
git reflog
- 版本切换
git reset --hard HEAD^ #回退上一个版本 ^表示一个版本 ^^ 表示两个版本
git reset --hard HEAD~数字 #回退指定的前几个版本
git reset --hard 版本号(缩写4-5个字符) #根据版本号回退到指定的历史版本
- 拉取本地仓库的文件
git checkout [fileName] #拉取本地仓库的指定文件
git checkout . #拉取本地仓库的所有文件
- 删除本地仓库的文件
git rm . #删除本地仓库的所有文件
git rm [fileName] #删除本地仓库的指定文件
- 文件差异对比(本地仓库文件与工作区同名文件之间的差异对比)
git diff HEAD -- [fileName]
- 撤销暂存区文件
git reset HEAD [fileName](文件夹)
- 拉取远程仓库的代码
git clone [远程仓库地址SSH/Http]
三、推送远程仓库(gitHub)
- 首先注册gitHub账号登录并创建仓库
- 生成SSH私钥和公钥
ssh-keygen -t rsa -C "邮件地址@youremail.com"
- 添加秘钥到github
- 复制SSH地址进行本地git绑定
- 检测SSH配置是否连接通
ssh -T [email protected]
- 绑定远程SSH地址
git remote add origin(别名) [SSH地址]
- 创建分支
git branch -M [分支名]
- 远程推送
git push -u origin[SSH地址别名] [分支名]
四、本地仓库分支操作
- 查看本地分支列表
git branch [分支名]
- 创建并切换本地分支
git checkout -b [分支名]
- 合并分支(首先要切换到主分支上再进行合并分支,前提要在同一个仓库)
git merge [分支名] #合并分支到当前主分支
- 合并不同仓库的分支
git merge [分支名] --allow-unrelated-histories #合并远程仓库分支到主分支
- 重命名分支(M表示强制重命名)
git branch -m|-M [oldBranch] [newBranch]
- 删除分支
git branch -d [分支名]
五、远程仓库分支操作
- 查看所有分支包括远程分支
git branch -a
- 推送本地分支到远程仓库(必须切换到同名分支工作区)
git push -u origin [远程仓库分支名]
- 删除远程分支名
git push origin :[远程仓库分支名]
- 拉取远程仓库到本地仓库(两步走)
1、git clone [仓库地址SSH/http地址] #工作区默认是指向并创建master分支。
2、git checkout [对应的远程分支] 或者 git checkout -b [本地仓库分支] origin/[远程仓库分支]#指定创建对应同名本地分支。
- 同步远程仓库分支文件到本地分支(只能同步同名分支)
git pull origin [远程分支名] #pull指定的分支,前提是要合并当前分支。
git pull origin [远程分支名]:[本地分支名] #同步远程分支文件到指定的本地分支
git pull #同步当前分支同名的远程分支
- 绑定远程仓库地址
git remote add [别名] [SSH/http地址] #一般别名设置为origin
- 删除绑定远程仓库指定地址
git remote remove [别名] #删除指定远程地址
- 查看绑定远程仓库地址
git remote -v
六、分支冲突
- 本地分支冲突(不同分支合并时)
本地不同分支,修改相同文件中同样位置,进行本地分支合并到主分支时出现的冲突。
解决:需要根据实际情况来解决分支。(修改主分支上的冲突文件) 然后进行add . -->commit -m ""提交到本地仓库,自动合并分支。解决冲突后的文件在主分支上,其他分支还是原状。
- 远程分支冲突(相同分支推送时)
不同客户端拉取远程仓库中的文件,A客户端修改A分支代码并进行了远程提交,而B客户端在修改A分支代码之前没有执行同步远程分支操作(git pull),也修改了相同文件相同位置的代码,也进行远程提交,就产生了远程分支冲突。
解决:B客户端分支拉取远程仓库A分支中的代码,然后根据实际情况修改冲突文件中的文本,再重新提交远程仓库。
- 模拟本地冲突
1、新建一个文件夹
2、git init
3、编写一个test.txt文件
4、git add.
5、git commit -m "提交本地仓库创建master分支“
6、git checkout -b dev #创建并切换到dev分支
7、编写test文件中的内容
8、提交到本地仓库dev分支上
9、git checkout master
10、修改dev分支上相同位置的test文件
11、提交到本地仓库master分支上
12、git merge dev #把dev分支合并到master分支上
- 模拟远程冲突
1、新建两个文件夹 (文件夹A 文件夹B)
2、git clone [地址] #分别拉取远程仓库文件
3、然后分别修改同一个分支相同文件中的相同位置。
4、同时或者其中一个文件夹先提交本地仓库。(先提交的没冲突,后提交的产生冲突)
5、然后后提交的文件夹进行git pull同步仓库,就产生冲突文件
- 总结
为了尽可能排除远程仓库中分支冲突,我们在修改文件前应该先同步仓库(git pull),再进行修改代码最后提交远程仓库。
正确的操作流程:
1、首先 git clone 仓库地址 #拉取远程仓库到本地仓库
2、进入仓库文件夹
3、git checkout -b [分支] origin/[远程分支名] #在本地创建本地仓库分支并切换该分支并把远程该分支文件加载
4、git pull
5、修改代码。
6、提交代码到远程仓库。
七、tag标签命令(压缩包)
- 创建标签
git tag [标签名]
- 创建带注释的标签
git tag -a [标签名] -m "注释信息"
- 查看所有的标签
git tag
- 推送单个标签
git push origin [标签名]
- 推送所有未提交标签
git push --tags
- 删除本地标签
git tag -d [标签名]
- 删除远程标签
git push origin :refs/origin/[标签名]
八、IEDA集成git环境
- 配置IDEA集成git设置
- 打开IDEA情况下拉取远程仓库代码
- 本地项目提交到远程仓库
初始化本地仓库 选择项目根路径下
提交项目到本地仓库 一般先提交.gitIgnore文件到本地仓库,再提交代码,可以过滤掉不需要提交的文件!
IDEA分支管理
分支冲突处理界面 (处理完冲突会自动提交!)
查看git日志
如果不小心提交文件错了进暂存区
git reset HEAD [文件名] #撤销暂存区文件提交
标签:Git,提交,版本控制,仓库,git,本地,工具,远程,分支
From: https://www.cnblogs.com/smallzengstudy/p/17720779.html