Git详解

Git是一个开源的分布式版本控制系统,常用于软件开发中对代码版本管理。Git具有版本控制、协作开发、分支管理、代码审查等功能,能够记录每次代码修改的内容和时间,并能够回滚到任意历史版本,方便团队协作和代码维护。

Git的基本概念包括仓库(repository)、分支(branch)、提交(commit)和合并(merge)。

  1. 仓库(repository)

仓库是Git存储代码的基本单位,可以理解为一个目录,其中包含着项目的所有文件和历史提交记录。Git支持本地仓库和远程仓库,本地仓库存储在开发者的计算机上,而远程仓库通常存储在云端,如GitHub、GitLab等。

  1. 分支(branch)

分支是Git非常重要的概念,它允许开发者在不影响主干代码的情况下,进行代码的修改和开发。每一个分支都是当前代码仓库中的一个拷贝,可以独立进行修改和版本管理。通过分支可以实现多人协作开发,同时也方便代码的维护和管理。

  1. 提交(commit)

提交是Git在代码仓库中保存修改后的版本。每一次提交都会记录该次修改的作者、时间和修改内容等信息。Git中的提交可以在本地进行,也可以在远程仓库进行。

  1. 合并(merge)

合并是将两个分支或多个分支的修改集成到一起,以合并后的版本作为基础版本,可以保留各自修改的内容。在多人协作开发中,合并是非常重要的操作,可以避免代码冲突和重复开发的问题。

安装git

centos 自带git

[root@git ~]# rpm -qa git
git-1.8.3.1-11.el7.x86_64

安装方法

[root@git ~]# yum install git -y

编译安装,可以安装新版本的git

Git下载地址: Releases · git/git · GitHub

# 安装依赖关系
[root@git ~]# yum install curl-devel expat-devel gettext-devel  openssl-devel zlib-devel autoconf gcc perl-ExtUtils-MakeMaker
# 编译安装 
[root@git ~]# tar -zxf git-2.0.0.tar.gz
[root@git ~]# cd git-2.0.0
[root@git ~]# ./configure --prefix=/usr/local/git # 没有文件可以略过
[root@git ~]# make  
[root@git ~]# make install  

第一次运行git前的配置

git config --global user.name "username"  #配置git使用用户
git config --global user.email "email@mail.com"  #配置git使用邮箱
git config --global color.ui true  #语法高亮
git config --list # 查看全局配置

过程

[root@gitlab ~]# git config --global user.name "newrain"  #配置git使用用户
[root@gitlab ~]# git config --global user.email "newrain@aliyun.com"  #配置git使用邮箱
[root@gitlab ~]# git config --global color.ui true  #语法高亮
[root@gitlab ~]# git config --list # 查看全局配置
user.name=newrain
user.mail=newrain@aliyun.com
color.ui=true

生成的配置文件

[root@gitlab ~]# cd
[root@gitlab ~]# cat .gitconfig 
[user]name = newrainemail = newrain@aliyun.com
[color]ui = true

获取git仓库

创建个远程裸库

创建目录
[root@yuancheng ~]# mkdir /git
[root@yuancheng ~]# cd /git
[root@yuancheng git]# ls创建裸库
[root@yuancheng git]# git init --bare ml.git
初始化空的 Git 版本库于 /git/ml.git/
[root@yuancheng git]# ls
ml.git授权
[root@yuancheng git]# chown -R git.git ml.git/

克隆远程库生成本地的仓库

如果是另外一台虚拟机,那么也得进行git配置
git config --global user.name "username"  #配置git使用用户
git config --global user.email "email@mail.com"  #配置git使用邮箱
git config --global color.ui true  #语法高亮克隆
git clone git@192.168.249.156:/git-root/shell.git

语法就是: git clone  + 你要克隆的IP:+路径

创建本地库上传至远程库

创建本地空库
[root@bendi ~]# git init cloud
初始化空的 Git 版本库于 /root/cloud/.git/
[root@bendi ~]# cd cloud/指定远程仓库
[root@bendi cloud]# git remote add origin 192.168.231.235:/git/ml.git拉取远程仓库的项目
[root@bendi cloud]# git pull  192.168.231.235:/git/ml.git
root@192.168.231.235's password: 
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 12 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (12/12), done.
来自 192.168.231.235:/git/ml* branch            HEAD       -> FETCH_HEAD拉取成功
[root@bendi cloud]# ls
123.txt  test1.txt  test2.txt  test3.txt
[root@bendi cloud]# ls -a
.  ..  123.txt  .git  test1.txt  test2.txt  test3.txt进入仓库
[root@bendi cloud]# cd .git
[root@bendi .git]# ls
branches  description  HEAD   index  logs     refs
config    FETCH_HEAD   hooks  info   objects

在本地仓库写好数据上传至远程仓库

创建文件
[root@bendi cloud]# echo 'abc' > abc.txt上传到暂存区,object只有一个内容
[root@bendi cloud]# git add abc.txt 上传至本地仓库,object下生成内容,会有数据的信息和大小
[root@bendi cloud]# git commit -m 'abc'
[master 2530c4c] abc1 file changed, 1 insertion(+)create mode 100644 abc.txt上传至远程仓库
[root@bendi cloud]# git push origin master
root@192.168.231.235's password: 
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 246 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To 192.168.231.235:/git/ml.git3488352..2530c4c  master -> master

文件的状态变化周期

查看仓库内的上传上来的数据

上传到远程仓库的代码都在 仓库下的object目录下
[root@localhost shell.git]# cd objects/
[root@localhost objects]# ls
19  30  c4  info  pack查看结构
[root@localhost objects]# tree
.
├── 19
│   └── 0a18037c64c43e6b11489df4bf0b9eb6d2c9bf
├── 30
│   └── 934b5e119e7d374ae4bdc95f0a78529dce3378
├── c4
│   └── e7906139a764188f373d51cc188a7f578b07f5
├── info
└── pack5 directories, 3 files查看数据信息
[root@localhost objects]# git cat-file -p 190a1803
123[root@localhost objects]# git cat-file -p 30934
100644 blob 190a18037c64c43e6b11489df4bf0b9eb6d2c9bf	123.txt[root@localhost objects]# git cat-file -p  c4e790
tree 30934b5e119e7d374ae4bdc95f0a78529dce3378
author newrain <newrain@aliyun.com> 1700473533 +0800
committer newrain <newrain@aliyun.com> 1700473533 +0800123

git cat-file -p +(tree显示的内容,只需要加目录下和目录下的前几位字母即可)

git cat-file -s 查看大小

git cat-file -t 查看类型

命令之git status

git status命令用于显示工作目录和暂存区的状态。它可以告诉你哪些文件被修改过,哪些文件已经被暂存,哪些文件还没有被跟踪等等。

git常见命令操作

命令命令说明
#add添加文件内容至索引
bisect通过二分查找定位引入 bug 的变更
#branch列出、创建或删除分支
#checkout检出一个分支或路径到工作区
#clone克隆一个版本库到一个新目录
#commit记录变更到版本库
#diff显示提交之间、提交和工作区之间等的差异
fetch从另外一个版本库下载对象和引用
grep输出和模式匹配的行
#init创建一个空的
#log显示提交日志
#merge合并两个或更多开发历史
#mv移动或重命名一个文件、目录或符号链接
#pull获取并合并另外的版本库或一个本地分支
#push更新远程引用和相关的对象
rebase本地提交转移至更新后的上游分支中
#reset重置当前HEAD到指定状态
#rm从工作区和索引中删除文件
show显示各种类型的对象
#status显示工作区状态
#tag创建、列出、删除或校验一个GPG签名的 tag 对象

查看历史命令

git log #→查看提交历史记录

git log -2 #→查看最近几条记录

git log -p -1 #→-p显示每次提交的内容差异,例如仅查看最近一次差异

git log --stat -2 #→--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

git log --pretty=oneline #→--pretty根据不同的格式展示提交的历史信息

git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录

git log --pretty=fomat:"%h %cn" #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。

实践

[root@bendi cloud]# git log
commit 3450be09f9358c5852973443e2ac5b754773aa50
Author: ml <ml@11.com>
Date:   Mon Nov 20 14:08:48 2023 +08003333commit 620d9c2f7cd5c3fb2e0dc84771549cec29faf752
Author: ml <ml@11.com>
Date:   Mon Nov 20 10:10:58 2023 +0800zzzz commitcommit 63e83071fb506a671f2930038b7cfcfd24dacf9b
Author: ml <ml@11.com>
Date:   Mon Nov 20 09:30:28 2023 +0800first commit

现在有这些文件

[root@bendi cloud]# ls
test1.txt  test2.txt  test3.txt

还原历史数据

Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。

git reset --hard hash

git reset --hard HEAD^ #→还原历史提交版本上一次

git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统

会自动匹配)

测试

[root@bendi cloud]# git reset --hard 63e8307
HEAD 现在位于 63e8307 first commit查看数据
[root@bendi cloud]# ls
test1.txt

还原未来数据

什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git log已经找不到这个版本了。

git reflog #→查看未来历史更新点

测试命令

[root@bendi cloud]# git reflog
63e8307 HEAD@{0}: reset: moving to 63e8307
3450be0 HEAD@{1}: commit: 3333
620d9c2 HEAD@{2}: initial pull开始还原
[root@bendi cloud]# git reset --hard 3450be0
HEAD 现在位于 3450be0 3333查看还原数据
[root@bendi cloud]# ls
test1.txt  test2.txt  test3.txt

删除git内的文件

前提:创建一个文件,将其添加到暂存区

[root@bendi cloud]# git status 
# 位于分支 master
无文件要提交,干净的工作区
[root@bendi cloud]# echo 123 > 1.txt
[root@bendi cloud]# ls
1.txt  test1.txt  test2.txt
[root@bendi cloud]# git status 
# 位于分支 master
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#	1.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)添加到暂存区
[root@bendi cloud]# git add 1.txt 
[root@bendi cloud]# git status 
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#	新文件:    1.txt
#

说明:

没有添加到暂存区的数据直接rm删除即可。

已经添加到暂存区数据:

git rm --cached database

将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

git rm -f database

将文件数据从git暂存区和工作目录一起删除

由于前提文件已经添加到暂存区,因此,只是rm --cached只会删除暂存区,源文件还在

[root@bendi cloud]# git rm --cached 1.txt 
rm '1.txt'
[root@bendi cloud]# ls
1.txt  test1.txt  test2.txt
[root@bendi cloud]# git status 
# 位于分支 master
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#	1.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

要将源文件以及暂存区的文件全部删除

[root@bendi cloud]# git status 
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#	新文件:    1.txt
#!!!!
[root@bendi cloud]# git rm -f 1.txt 
rm '1.txt'
[root@bendi cloud]# ls
test1.txt  test2.txt

重命名暂存区数据

没有添加到暂存区的数据直接mv/rename改名即可。

已经添加到暂存区的数据

[root@bendi cloud]# ls
123.txt  aaa.txt  test1.txt[root@bendi cloud]# git mv 123.txt  456.txt
[root@bendi cloud]# ls
456.txt  aaa.txt  test1.txt
[root@bendi cloud]# git status 
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#	新文件:    456.txt
#

对已经添加到暂存区的数据,使用shell命令mv直接改名

[root@bendi cloud]# mv 2.txt  3.txt
[root@bendi cloud]# ls
3.txt
[root@bendi cloud]# git status 
# 位于分支 master
# 尚未暂存以备提交的变更:
#   (使用 "git add/rm <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#	删除:      2.txt
#
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#	3.txt

他会先删除源文件,然后在创建3.txt

分支

在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。

那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。所以团队的合作分支看起来会像下图那样。

查看当前在哪个分支

[root@bendi cloud]# git branch
* master

创建分支

查看远程仓库在哪个分支
[root@yuancheng ml.git]# git branch
* master本地仓库
[root@bendi cloud]# git branch
* master创建分支
[root@bendi cloud]# git branch malong 
[root@bendi cloud]# git branchmalong
* master上传分支
[root@bendi cloud]# git push origin malong
root@192.168.231.235's password: 
Total 0 (delta 0), reused 0 (delta 0)
To 192.168.231.235:/git/ml.git* [new branch]      malong -> malong查看远程仓库的分支
[root@yuancheng ml.git]# git branchmalong
* master

切换分支

[root@bendi cloud]# git branchmalong
* master准备切换分支
[root@bendi cloud]# git checkout malong
切换到分支 'malong'
[root@bendi cloud]# git branch
* malongmaster

在malong分支进行修改,master分支不会有数据

[root@bendi cloud]# git branch
* malongmaster
在马龙分支创建提交数据
[root@bendi cloud]# echo '123'> 123.txt
[root@bendi cloud]# git add 123.txt 
[root@bendi cloud]# git commit -m '123'
[malong 3488352] 1231 file changed, 1 insertion(+)create mode 100644 123.txt
[root@bendi cloud]# git push origin malong
root@192.168.231.235's password: 
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 303 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 192.168.231.235:/git/ml.git3450be0..3488352  malong -> malong
[root@bendi cloud]# ls
123.txt  test1.txt  test2.txt  test3.txt切换回master分支
[root@bendi cloud]# git checkout master
切换到分支 'master'
[root@bendi cloud]# ls
test1.txt  test2.txt  test3.txt
[root@bendi cloud]# git status 
# 位于分支 master
无文件要提交,干净的工作区

合并代码

根据之前操作,malong分支上有123.txt 而master分支没有,进行合并

进行合并
[root@bendi cloud]# git merge master malong
更新 3450be0..3488352
Fast-forward123.txt | 1 +1 file changed, 1 insertion(+)create mode 100644 123.txt[root@bendi cloud]# ls
123.txt  test1.txt  test2.txt  test3.txt
[root@bendi cloud]# git branchmalong
* master

删除分支

[root@bendi cloud]# git branchmalong
* master
[root@bendi cloud]# git branch -d malong
已删除分支 malong(曾为 3488352)。
[root@bendi cloud]# git branch
* master强制删除分支
git branch -D 加分支名

总之,Git是一个非常强大、灵活和易于使用的版本控制系统,对于软件开发中的代码管理和协作非常有用。学习Git需要掌握其基本概念和操作,包括代码仓库的创建、分支的创建和合并、提交的管理等。同时需要注意Git的一些常见问题,如代码冲突、版本回滚等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu20.04中编译zlib1.2.11(源码编译)

1. 安装cmake-gui 2. 下载并解压zlib-1.2.11&#xff0c;在解压得到的文件夹内部创建一个“build”文件夹。 3. 打开cmake-gui&#xff0c;配置zlib1.2.11的configure文件&#xff08;主要编辑build路径&#xff0c;安装路径&#xff0c;以及其他依赖选项&#xff09;&#x…

2311rust过程宏的示例

原文 Rust2018中的过程宏 在Rust2018版本中,我最喜欢的功能是过程宏.在Rust中,过程宏有着悠久而传奇的历史(并继续拥有传奇的未来!) 因为2018年版极大改善了定义和使用它们的体验. 什么是过程宏 过程宏是,在编译时用一段语法,生成新语法的函数.Rust2018中的过程宏有三个风格…

JS:给数字添加千分位符(每3位数用逗号隔开)

背景 如果一串数字的长度太长&#xff0c;就不方便阅读&#xff0c;因此可以采用分隔符对数字进行分割本文的分割规则是&#xff1a; 如果数字的长度大于等于5则进行分割&#xff0c;每3位数用逗号分割开 解决 数字可以分为&#xff1a;number类型的数字和字符串类型的数字&…

前端反卷计划-组件库-03-组件样式

Hi, 大家好&#xff01;我是程序员库里。 今天开始分享如何从0搭建UI组件库。这也是前端反卷计划中的一项。 在接下来的日子&#xff0c;我会持续分享前端反卷计划中的每个知识点。 以下是前端反卷计划的内容&#xff1a; 目前这些内容持续更新到了我的 学习文档 中。感兴趣…

基于yolov5模型的200种鸟类检测识别分析系统

该专栏仅支持购买本专栏的同学学习使用,不支持以超级会员、VIP等形式使用,请谅解!【购买专栏后可选择其中一个完整源码项目】 本文是我新开设的专栏《完整源码项目实战》 的第十三篇全源码文章,包含数据集在内的所有资源,可以实现零基础上手入门学习。前面系列文章链接如下…

uniapp 防抖节流封装和使用

防抖(debounce)&#xff1a;定义一个时间&#xff0c;延迟n秒执行&#xff0c;n秒内再次调用&#xff0c;会重新计时&#xff0c;计时结束后才会再次执行 主要运用场景&#xff1a; 输入框实时搜索&#xff1a;在用户输入内容的过程中&#xff0c;使用防抖可以减少频繁的查询…

【ARM Trace32(劳特巴赫) 使用介绍 5 -- Trace32 ELF 文件加载介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 1.1 Trace32 加载符号表1.1.1 ELF 文件加载1.1.2 其它格式文件加载1.1.3 多个 ELF 的加载1.2 Trace32 UEFI 配置1.2.1 x86 32-BIT1.2.2 x86 64-BIT1.2.3 ARM1.1 Trace32 加载符号表 劳特巴赫 TRACE32 可以显示目标…

【每周一测】Java阶段三第三周学习

目录 1、事务四个隔离级别中&#xff0c;哪一个不能防止脏读 2、关于sleep()和wait()&#xff0c;以下描述错误的一项是&#xff08;&#xff09; 3、以下关于Servlet生命周期说法错误的是&#xff08; &#xff09; 4、下列概念解释说明错误的是 5、在 JWT 中&#xff0c…

数据结构与算法【二叉搜索树】Java实现

介绍 二叉搜索树&#xff08;也称二叉排序树&#xff09;是符合下面特征的二叉树&#xff1a; 树节点增加 key 属性&#xff0c;用来比较谁大谁小&#xff0c;key 不可以重复对于任意一个树节点&#xff0c;它的 key 比左子树的 key 都大&#xff0c;同时也比右子树的 key 都…

SQL-对比两表中数据

需求&#xff1a;表1中有多行id相同 select a.item_code, totalAmount , b.online_qty from (select item_code, sum(a.online_qty) as TotalAmountfrom serial_bal awhere a.wh_code SJ38group by item_code) a left join(select item_code,online_qtyfrom wh_bal bwhere b.…

ESP32 MicroPython 图像采集及拍照功能的使用⑧

ESP32 MicroPython 图像采集及拍照功能的使用⑧ 1、摄像头应用2、图像采集5、实验结果6、按键拍照7、实验内容8、参考代码9、实验结果 1、摄像头应用 小车配有摄像头&#xff0c;可以使用摄像头实现拍照、图像显示、图像识别等功能。小车已经内置有我们专门移植的摄像头驱动库…

[Docker]六.Docker自动部署nodejs以及golang项目

一.自动部署nodejs 1.创建node项目相关文件 app.js代码如下: var express require(express);var appexpress();app.get(/,function(req,res){res.send(首页update); }) app.get(/news,function(req,res){res.send(首页); })//docker做端口映射的时候不要指定ip app.listen(30…

大模型重塑软件设计,南京真我加入飞桨技术伙伴,大模型生态圈成员又添一员!

为帮助伙伴更快、更好的应用大模型技术&#xff0c;飞桨技术伙伴体系及权益基于星河共创计划全面升级&#xff0c;通过丰富的场景、技术、算力、品牌等资源&#xff0c;为伙伴企业提供一站式的大模型资源对接&#xff0c;全面降低创建AI原生应用的门槛。 近日&#xff0c;南京…

二十三种设计模式全面解析-解密职责链模式:请求处理的设计艺术

当我们构建软件系统时&#xff0c;经常会遇到需要处理各种不同类型请求的情况。有时&#xff0c;请求的处理逻辑可能相当复杂&#xff0c;需要按照一定的规则和条件进行处理。在本文中&#xff0c;我们将深入探讨职责链模式在请求处理中的应用。职责链模式通过将请求发送者和接…

win10家庭版系统远通过一根网线程连接另一台机器

用网线连接两个机器 打开cmd命令行 输入ipconfig&#xff0c;查看 复制 IPv4地址 打开 远程桌面 程序 点击连接 输入在另外一机器设置好的用户名和密码即可

docker打包chatpdf(自写)

docker打包上传 docker build -t kitelff/chatpdf:v0.1 .##修改镜像名字 docker tag c2c1a0eb4e08 kitelff/chatpdf:v0.1## push docker push kitelff/chatpdf:v0.1上传文件&#xff0c;测试效果

【brpc学习实战二】brpc client构建基本流程

client基本概念及学习指南 https://github.com/luozesong/brpc/blob/master/docs/cn/client.md 一、编写proto 这里与服务一致&#xff0c;实际开发中需要双端共同确定proto内容&#xff1b; 二、初始化channel rpc channel可以视为socket编程中的client对象 定义一个chan…

字符串统计

题目部分 题目字符串统计难度易题目说明给定两个字符集合&#xff0c;一个是全量字符集&#xff0c;一个是已占用字符集&#xff0c;已占用字符集中的字符不能再使用&#xff0c;要求输出剩余可用字符集。输入描述1. 输入一个字符串 一定包含&#xff0c;前为全量字符集 后的为…

BananaPi BPI-M6(Raspberry Pi 5) Android 平板电脑镜像测试温度

我已经在本文中介绍了 全新的Banana Pi BPI-M6&#xff0c;并讨论了其与Raspberry Pi 5的硬件特性比较。 然后我将 Android 平板电脑固件上传到 eMMC&#xff0c;从而使 Banana Pi 实际可用。一开始有点坎坷&#xff0c;但文章中有更多内容。 在另一台电脑上&#xff0c;一切都…

Arcgis小技巧【16】:ArcMap的那些功能在ArcGIS Pro里都去哪儿了?

有部分小伙伴现在已经用上了ArcGIS Pro&#xff0c;但可能还会有些不习惯。 一个很重要的原因&#xff0c;原来在ArcMap中的一些功能&#xff0c;好像在Pro里消失了。 不排除一些功能确实被移除了&#xff0c;但大部分其实是因为UI的变化&#xff0c;给放在了别的地方。 这里…