论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
Nosql
›
Git使用教程
Git使用教程
王國慶
金牌会员
|
2022-9-21 21:36:11
|
显示全部楼层
|
阅读模式
楼主
主题
917
|
帖子
917
|
积分
2755
目录
1. 主要的两类版本控制模式
1.1 集中式控制(代表:SVN)
1.11 简介
1.12 优点
1.13 缺点
1.2 分布式控制(代表:GIT)
1.21 简介
1.22 优点
1.23 缺点
2. GIT的环境安装
2.1 通过Homebrew安装
2.2 官网下载安装包安装
3. GIT使用教程
3.1 介绍
3.2 GIT环境配置
3.3 GIT基本理论
3.31 工作区域
3.32 工作流程
3.4 GIT仓库搭建
3.41 本地仓库搭建
3.42 克隆远程仓库进本地
3.5 GIT文件操作
3.51 文件的四种状态
3.52 文件操作
3.53 忽略文件
3.6 使用远程仓库(以码云为例)
3.61 实现免密码登陆
3.62 远程仓库操作
3.7 GIT分支
3.71 简介
3.72 分支命令
3.73 分支冲突
4. IDEA中集成GIT操作(PyCharm)
4.1 新建项目并绑定GIT
4.2 使用PyCharm操作GIT
5. GitLab(自建代码托管平台)
5.1介绍
5.2 如何安装
5.21 服务器准备
GIT命令快查表
仓库
配置
增加/删除文件
代码提交
分支
标签
查看信息
远程同步
撤销
其他
1. 主要的两类版本控制模式
1.1 集中式控制(代表:SVN)
1.11 简介
有一台主要的服务器,所有的版本信息都保存在该服务器当中,每当有成员修改了项目,需要提交到服务器当中,另一个成员要使用项目时,需要从服务器当中下载最新的项目
1.12 优点
具有隐私性,当所有的项目信息只存在于服务器当中
易查看所有保存的版本信息
1.13 缺点
当服务器瘫痪或损坏时,就不能进行进行版本控制了,甚至可能导致数据丢失
当断网时,不可进行版本控制
1.2 分布式控制(代表:GIT)
1.21 简介
和集中式相反,每个成员都保存着所有的版本信息,每当有成员提交项目时,会先保存在本机上,然后再上传至主服务器和其他成员,而每当有成员要修改项目内容时,只需要在修改完本地的项目后相互推送给对方即可,就可以互相看到双方的修改了
1.22 优点
不易丢失数据,当主服务器或者成员电脑损坏后,可以直接从其他成员那备份到完成的数据过来
断网时仍然可以更新版本,因为所有的版本都在自己的电脑上了,不会因为暂时性没网而停止工作
1.23 缺点
容易导致隐私泄漏,因为每个成员的电脑上均保存着所有的版本信息,所以成员可以直接将电脑上的所有信息泄漏出去
2. GIT的环境安装
2.1 通过Homebrew安装
如果电脑有装homebrew的话,直接终端执行brew install git即可
2.2 官网下载安装包安装
官网链接:
https://git-scm.com
3. GIT使用教程
3.1 介绍
GIT有三种基本的操作方式
Bash:Linux命令行
Gui:图形操作界面
CMD:Windows命令行
最方便且最通用的是
Bash
操作方式
3.2 GIT环境配置
# 查看当前用户的所有配置
git config -l
# 查看本地系统配置 -- 系统自动配置的信息
git config --system --list
# 查看本地用户配置 -- 用户自己配置的信息
git config --global --list
# 设置用户配置 -- 因为在使用git提交项目时,其他成员需要知道是谁提交的
# 所以每个成员需要设置自己的用户名、邮箱
git config --global user.name "用户名"
git config --global user.email "邮箱"
复制代码
3.3 GIT基本理论
3.31 工作区域
Git本地有三个工作区域:
工作区(Working Directory):平时存放项目代码的地方
暂存区(Stage/index):用于临时存放项目的改动,实际上只是一个文件,保存即将提交到文件列表信息
资源库(Git Directory):本地仓库,存放数据的地方,里面存放着提交到所有版本的数据,其中HEAD文件指向最新放入仓库的版本
Git远程有一个工作区域:
Git仓库(Remote Directory):像类似GitHub、Gitee等远程托管仓库,存放着我们推送上去的版本信息
3.32 工作流程
在工作区添加,修改文件
git add 文件 # 将工作区的文件放入暂存区
将需要进行版本管理的文件放入暂存区
git commit # 将暂存区文件提交到本地仓库
将暂存区的文件提交到本地仓库
git push # 将本地仓库文件推送到远程仓库
如果需要提交到远程仓库,则继续将本地仓库的数据提交到远程仓库进行托管
3.4 GIT仓库搭建
3.41 本地仓库搭建
用cd切换进工作目录
输入 git init初始化工作区,会在工作目录中创建一个
.git
的隐藏文件
3.42 克隆远程仓库进本地
在GitHub/Gitee的仓库中,会有一个克隆按钮,复制其中的链接
利用cd切换进工作目录
使用如下命令将远程服务器上的仓库完全镜像一份到本地仓库中
git clone 在GitHub/Gitee上所复制的链接
3.5 GIT文件操作
3.51 文件的四种状态
未跟踪(Untracked):文件在文件目录内,但并没有加到本地仓库中,所以不参与版本控制,可以通过 git add将状态变成暂存状态
未修改(Unmodify):文件已入库,但是没有修改,即本地仓库内的文件快照与文件目录下的数据完全一致,因为我们进行版本控制的目的是为了控制每次所修改的文件,而文件若没有修改,就无需使用版本控制了,可以使用如下两种方法改变此状态
修改该文件,文件就会自动变成已修改状态
使用git rm进行移出本地仓库,则会变成未跟踪状态
已修改(Modified):文件已修改,但是还未进行其他操作,有以下操作改变此状态
使用git add将其放入暂存区,使其变成暂存状态
使用git checkout丢弃已修改的内容,将会返回成未修改状态
暂存状态(Staged):当更新或修改完的要进行版本控制的文件后,文件则会变成暂存状态,有如下操作
执行git commit将已修改的文件同步至本地仓库,此时本地仓库的文件与本地目录的文件又变成一致的,此时本地的文件又会变成未修改状态
执行git reset HEAD filename取消保存本地仓库,文件状态为已修改
3.52 文件操作
使用git status来查看文件状态
当文件目录没有文件时,在终端中输入上述命令会显示如下信息
当在文件目录创建了一个未跟踪的文件hello.txt时
当将该文件用git add .添加进暂存区时,会显示
当使用git commit -m将文件提交至本地仓库中,会显示
3.53 忽略文件
当我们不想提交某些文件进入仓库中时,可以在工作目录下建立
.gitignore
文件,该文件规则如下
忽略文件中以#或空格开头的行将被忽略
可以使用Linux通配符来忽略
例如:*.txt # 忽略所有以.txt结尾的文件
在文件名前加!表示例外规则,该文件将不被忽略
!lib.txt # 该文件不会被忽略
文件名前加/表示该文件内除子目录以外的所有文件均忽略
例如有一个这样的文件结构
可以看到git_test_file里有一个文件hello.txt,和一个子目录lalala
当使用/git_test_file的时候,只会忽略hello.txt,而不会忽略lalala子目录里的内容
文件名后加/忽略目录下所有文件
git_test_file/ # 会忽略该目录下的所有文件,包括子目录
上述操作可以嵌套使用
doc/*.txt # 忽略doc目录下的所有以.txt结尾的文件
3.6 使用远程仓库(以码云为例)
3.61 实现免密码登陆
设置本地绑定SSH公钥
首先进入本地的
.ssh
目录,MacOs在/Users/用户名/.ssh下
生成公钥,在终端中输入ssh-keygen,若想加密自己的公钥,可以输入ssh-keygen -t rsa
生成公钥后,会在
.ssh
下生成两个文件,
id_rsa
是私钥,
id_rsa.pub
为公钥
将刚生成的公钥打开,将里面的内容复制到码云信息当中去
添加完成后在当前页面出现已绑定的公钥,到这步就完成了本机仓库与远程仓库之间的免密码登陆
3.62 远程仓库操作
新建远程仓库
创建完远程仓库后将本地仓库链接到远程仓库
git clone 远程仓库链接见
3.42
3.7 GIT分支
3.71 简介
每个项目都有一个主分支,一般设置成
master
或
main
如上图所示,该项目有6个分支,分支可以用来当作某个大版本,比如你想要你的项目有版本1版本2等等,就可以弄出两个版本分支
3.72 分支命令
# 列出所有本地分支
git branch
# 列出远程所有分支
git branch -r
# 新建一个分支,但还是停留在原分支
git branch [branch-name]
# 新建一个分支,并切换至该分支
git branch -b [branch-name]
# 合并指定分支到当前分支
git merge [branch-name]
# 删除本地分支
git branch -d [branch-name]
# 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
# 切换分支
git checkout [branch-name]
复制代码
3.73 分支冲突
当多个分支存在冲突时,比如存在两个分支,A分支和B分支,B分支上的程序需要用到A分支的内容,于是就将A分支拉取下来合并到了B分支中,而且在使用A分支内容的时候,又修改了A分支的数据,而在这个时候,A分支的开发者又在A上修改了一定的数据,从而导致了仓库不知道保存哪个开发者的信息了,这就是冲突
解决办法:我们可以互相协商后,然后修改冲突文件重新提交即可,比如是保存A所修改的内容还是B所修改的内容
一般在开发的时候,主分支应该保持稳定的状态,所以一般不在主分支上进行工作,会创建其他的分支进行工作,当在其他的分支完成工作后且测试温度后,再将其和主分支进行合并发布
4. IDEA中集成GIT操作(PyCharm)
4.1 新建项目并绑定GIT
用pycharm把项目创建在工作区内
打开远程仓库所克隆的本地项目目录,将该目录下所有文件替换拷贝进pycharm所创建的项目目录内即可完成Git绑定(包括隐藏文件,Mac上用“
command+shift+.
”显示隐藏文件)
4.2 使用PyCharm操作GIT
一般的IDEA都会嵌入Git操作,PyCharm如下图所示
版本控制按钮可以看到仓库的所有进行过的操作
然后就可以进行Git操作了
可以直接在pycharm里的终端输入命令来提交推送
也可以手动点击按钮来提交推送
5. GitLab(自建代码托管平台)
5.1介绍
GitLab是一个自建代码托管平台,可以安装在自己服务器当中,效果类似于GitHub/Gitee,只不过GitHub/Gitee是他人代码平台
5.2 如何安装
5.21 服务器准备
GIT命令快查表
仓库
# 在当前目录新建一个Git代码库
$ git init
# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]
# 下载一个项目和它的整个代码历史
$ git clone [url]
复制代码
配置
# 显示当前的Git配置
$ git config --list
# 编辑Git配置文件
$ git config -e [--global]
# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
复制代码
增加/删除文件
# 添加指定文件到暂存区
$ git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add .
# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
复制代码
代码提交
# 提交暂存区到仓库区
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
复制代码
分支
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 新建一个分支,指向指定commit
$ git branch [branch] [commit]
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 切换到上一个分支
$ git checkout -
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
$ git branch --set-upstream-to=[remote-branch] [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
复制代码
标签
# 列出所有tag
$ git tag
# 新建一个tag在当前commit
$ git tag [tag]
# 新建一个tag在指定commit
$ git tag [tag] [commit]
# 删除本地tag
$ git tag -d [tag]
# 删除远程tag
$ git push origin :refs/tags/[tagName]
# 查看tag信息
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交所有tag
$ git push [remote] --tags
# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]
复制代码
查看信息
# 显示有变更的文件
$ git status
# 显示当前分支的版本历史
$ git log
# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat
# 搜索提交历史,根据关键词
$ git log -S [keyword]
# 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s
# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature
# 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]
# 显示指定文件相关的每一次diff
$ git log -p [file]
# 显示过去5次提交
$ git log -5 --pretty --oneline
# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn
# 显示指定文件是什么人在什么时间修改过
$ git blame [file]
# 显示暂存区和工作区的差异
$ git diff
# 显示暂存区和上一个commit的差异
$ git diff --cached [file]
# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]
# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"
# 显示某次提交的元数据和内容变化
$ git show [commit]
# 显示某次提交发生变化的文件
$ git show --name-only [commit]
# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]
# 显示当前分支的最近几次提交
$ git reflog
复制代码
远程同步
# 下载远程仓库的所有变动
$ git fetch [remote]
# 显示所有远程仓库
$ git remote -v
# 显示某个远程仓库的信息
$ git remote show [remote]
# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]
# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
# 上传本地指定分支到远程仓库
$ git push [remote] [branch]
# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force
# 推送所有分支到远程仓库
$ git push [remote] --all
复制代码
撤销
# 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]
# 恢复暂存区的所有文件到工作区
$ git checkout .
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]
# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard
# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]
# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]
# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]
暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop
复制代码
其他
# 生成一个可供发布的压缩包
$ git archive
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王國慶
金牌会员
这个人很懒什么都没写!
楼主热帖
webman
Jupyter Notebook,太强大了
【Shashlik.EventBus】.NET 事件总线, ...
React技巧之发出http请求
【网络】https单向认证和双向认证 ...
场景化数据应用,企业业务创新的内在驱 ...
导入例子体验鸿蒙开发工具的hello worl ...
【云原生架构】阿里云 —— 主要架构模 ...
一文搞懂this指向
2022-08-16 数据库查询语言之-------D ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表