一、Git介绍
# Git简介
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
官网地址为:https://git-scm.com/
# Git作用
1 对文件(代码)进行版本管理
2 完成 协同开发 项目,帮助程序员整合代码
i)帮助开发者合并开发的代码
ii)如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
# Git和SVN的区别
1 SVN是集中式版本控制系统,而Git是分布式版本控制系统,这是Git和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
2 Git把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
3 Git分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
4 Git没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
5 Git的内容完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
二、Git工作流程
# 工作流程如下:
1 从远程仓库中克隆 Git 资源作为本地仓库;
2 从本地仓库中checkout代码然后进行代码修改;
3 在提交本地仓库前先将代码提交到暂存区;
4 提交修改,提交到本地仓库;本地仓库中保存修改的各个历史版本;
5 在需要和团队成员共享代码时,可以将修改代码push到远程仓库。
# 注意点:
"""
1)有红色信息(工作区有内容),就执行 add
2)全绿信息(内容全部在暂存区),才执行 commit
3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
"""
三、Git常用命令
3.1 初始化仓库
# 初始化仓库
git init
3.2 在仓库中新增文件
# 在仓库中新增文件
touch test.py
3.3 查看仓库状态
# 查看仓库状态
git status
3.4 配置用户信息
# 配置用户信息
局部配置---》只针对于当前仓库--》当前仓库.git文件夹下的config中
git config user.name 'dy12138'
git config user.email '[email protected]'
全局配置---》针对于所有仓库---》 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用
git config --global user.name 'dy12138'
git config --global user.email '[email protected]'
3.5 把工作区内容提交到暂存区
# 5 把工作区内容提交到暂存区
git add . # 把工作区所有更改都提交到暂存区
git add 文件名 # 把工作区当前文件的更改都提交到暂存区
3.6 把暂存区提交到版本库,不要忘记加注释
# 6 把暂存区提交到版本库,不要忘记加注释
git commit -m '提交了test.py'
3.7 修改一下test.py ,再提交到本地版本库
# 7 修改一下test.py ,再提交到本地版本库
git status # 状态变成了红色
git add . # 提交到暂存区
git status # 状态变成了绿色
git commit -m '修改了test.py'
git status # 没有变化
3.8 查看版本情况,本地版本库有哪些版本,一个版本有一个唯一id号
# 8 查看版本情况,本地版本库有哪些版本,一个版本有一个唯一id号
git log # 详细的显示
git reflog # 精简的显示
3.9 修改test.py后,进行回退操作
# 9 修改test.py后,进行回退操作
git checkout . # 当前所有的更改都回退,不包含新增的文件
3.10 把123.txt,先提交到暂存区
# 10 把123.txt,先提交到暂存区
新增123.txt
git add .
git status # 123.txt变绿了
git reset HEAD # 123.txt变红了,说明从暂存区拉回到了工作区
3.11 把版本库内容,回退到暂存区
# 11 把版本库内容,回退到暂存区
git reset --soft 上一个的版本号
3.12 从版本库拉回到工作区
# 12 从版本库拉回到工作区
git reset --版本号
git reset --mix 版本号
3.13 撤销版本库提交:commit的逆向运算
"""
回滚暂存区已经提交到版本库的操作:
查看历史版本:
>: git log
>: git reflog
查看时间点之前/之后的日志:
>: git log --after 2018-6-1
>: git log --before 2018-6-1
>: git reflog --after 2018-6-1
>: git reflog --before 2018-6-1
查看指定开发者日志
>: git log --author author_name
>: git reflog --author author_name
回滚到指定版本:
回滚到上一个版本:
>: git reset --hard HEAD^
>: git reset --hard HEAD~
回滚到上三个版本:
>: git reset --hard HEAD^^^
>: git reset --hard HEAD~3
回滚到指定版本号的版本:
>: git reset --hard 版本号 (重点)
>: eg: git reset --hard 35cb292
"""
3.14 git log和git reflog
git log 和git reflog的区别
git log 命令可以显示所有提交过的版本信息如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息
git reflog 命令可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
git reset --hard,--mix,--soft的区别
hard (硬)-> 全部删除,会彻底返回到回退前的版本状态,了无痕迹mixed (中)-> 保留工作目录,文件回退到未commit的状态
soft (软)-> 保留工作目录、暂存区 ,文件会回退到未 add(未到暂存)的状态
总结:soft是撤销commit的提交,但工作区未提交的更改还是保留;mixed是撤销暂存区的提交,工作区的更改同样也保留;而hard是把工作区、暂存区、commit到仓库的三个版本都回滚了
四、Git过滤文件
在项目中,并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。
# 在仓库中新建 .gitignore,在文件中配置
1)在仓库根目录下创建该文件
2)文件与文件夹均可以被过滤
3)文件过滤语法
""" 过滤文件内容
文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
eg:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
"""
五、Git管理luffy项目
# 在项目根路径下输入git init
# 创建 .gitignore
# git add .
# git commit -m '初始化项目'
# git status
# 误删文件时,利用回滚操作可以快速恢复
# git log
# git reset --hard 版本号
六、Git分支开发
"""
1.创建分支
>: git branch 分支名
2.查看分支
>: git branch
3.切换分支
>: git checkout 分支名
4.创建并切换到分支
>: git checkout -b 分支名
5.删除分支
>: git branch -d 分支名
6.查看远程分支
>: git branch -a
7.合并分支
>: git merge 分支名
把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令
"""
"""
1)多个开发者都是在一个分支上进行开发,不出意外,该分支一定叫dev(协同开发)
2)如果出现一个特殊任务(敏感任务),与正常业务关系不紧密,甚至可能大的影响正常的dev分支开发,可以依赖dev开一个子分支,进行开发,开发完毕后合并到dev分支,再删除该分支即可
3)所有的开发任务都可以在dev分支上进行(除非公司硬性要求不能直接在dev分支开发,只能在dev子分支开发,测试通过后才能合并给dev)
"""
七、Git远程仓库
我们要协同开发,代码要提交到远程仓库,可以使用gitee,github,gitlab,本文以gitee为例
7.1 创建远程仓库
# 首先注册gitee账号,登陆后,创建仓库
地址:https://gitee.com/dashboard
7.2 Git全局设置
git config --global user.name "dy12138"
git config --global user.email "[email protected]"
7.3 创建Git仓库
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/Fly12138/test.git
git push -u origin "master"
7.4 已有仓库
cd existing_git_repo
git remote add origin https://gitee.com/Fly12138/test.git
git push -u origin "master" # 把本地的主分支推到origin对应的远程分支
# 首次推送,需要输入gitee的账号和密码
以后不需要输入用户名密码了
在windows的控制面板中找到-------->凭证管理 可以查看删除,也可以修改
7.5 luffy项目上传到远程仓库
# 1 创建远程仓库luffy_api】
# 2 git clone https://gitee.com/liuqingzheng/luffy_api.git # 把远程仓库内容克隆到本地
# 3 把我们项目的代码,copy到 luffy_api这个文件夹下(.git文件夹不要copy)
# 4 git add .
# 5 git commit -m ‘初始化仓库’
# 6 git push origin master
八、SSH连接远程仓库
8.1 生成公钥私钥
# 打开cmd命令行或者Git Bash命令行,输入以下命令生成公钥私钥
ssh-keygen -t ed25519 -C "[email protected]"
# 查看生成的公钥
cat ~/.ssh/id_ed25519.pub
8.2 添加SSH公钥
8.4 使用SSH连接远程仓库
1 删除origin
git remote remove origin
2 查看
git remote
3 配置成ssh的地址
git remote add origin [email protected]:liuqingzheng/luffy_api.git
4 以后直接拉去,提交代码即可
git pull origin master
git push origin master
标签:11,git,--,08,仓库,Git,版本,分支
From: https://www.cnblogs.com/dy12138/p/16871224.html