首页 > 其他分享 >git入门使用

git入门使用

时间:2023-05-24 21:11:44浏览次数:52  
标签:Git git 入门 Arc master 使用 txt 分支

一、简介

(一)概述

​ Git 是分布式版本控制系统(DVCS)。它可以跟踪文件的更改,并允许你恢复到任何特定版本的更改。

​ 与 SVN 等其他版本控制系统(VCS)相比,其分布式架构具有许多优势,一个主要优点是它不 依赖于中央服务器来存储项目文件的所有版本。

​ 每个开发人员都可以“克隆”我在图中用“Local repository”标注的存储库的副本,并且在他的硬盘驱动器上具有项目的完整历史记录,因此当服务器中断时,你需要的所有恢复数据都在你队友的本地 Git 存储库中。

​ 还有一个中央云存储库,开发人员可以向其提交更改,并与其他团队成员进行共享,如图所示,所有协作者都在提交更改“远程存储库”。

image-20230519183439409

(二)Git 与 SVN

Git SVN
1. Git是一个分布式的版本控制工具 1. SVN 是集中版本控制工具
2.它属于第3代版本控制工具 2.它属于第2代版本控制工具
3.客户端可以在其本地系统上克隆整个存储库 3.版本历史记录存储在服务器端存储库中
4.即使离线也可以提交 4.只允许在线提交
5.Push/pull 操作更快 5.Push/pull 操作较慢
6.工程可以用 commit 自动共享 6.没有任何东西自动共享

(三)Git 安装

​ 去 官网 下载一路 next -> finish 就行了。

image-20230519183941213

image-20230519184029864

​ 安装完成后打开 Git Bash 可以通过命令 (其实就是 Linux 的命令)来设置有关信息,比如说用户名、邮箱等基本信息。

git config --global user.name "Arc"
git config --global user.email "Arc"
#查看信息
git config --list

image-20230519184627822

二、Git 工作流程和术语

(一)工作流程

一般工作流程如下:
1、克隆 Git 资源作为工作目录。
2、在克隆的资源上添加或修改文件。
3、如果其他人修改了,你可以更新资源。
4、在提交前查看修改。
5、提交修改。
6、在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

image-20230519185127884

(二)工作区、暂存区和版本库

image-20230519190312236

工作区:就是你在电脑里能看到的目录。

暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

​ 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 所代表的目录树。

​ 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

​ 图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

​ 当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

​ 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

​ 当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

​ 当执行 "git rm --cached file" 命令时,会直接从暂存区删除文件,工作区则不做出改变。

​ 当执行 "git checkout ." 或者 "git checkout -- file" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

​ 当执行 "git checkout HEAD ." 或者 "git checkout HEAD file" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

三、Git 仓库管理

(一)本地仓库提交

​ 我们可以使用 git init 初始化一个本地 git 仓库。

image-20230519190236296

​ 本地开发需要将自己写的代码提交到自己本地的暂存区(git add),然后再将暂存区中的文件提交到本地版本库(git commit),之后才能提交到公司的版本库中。

image-20230519213946939

​ 在工作区创建 A.java

image-20230522144610756

​ 通过 git add "文件" 将文件添加到暂存区;

image-20230522144618619

​ 通过 git commit -m "日志参数" 将暂存区的文件放到版本库中。

image-20230522144745556

​ 和在 Linux 中一样,可以通过 vim 指令查看和修改版本库文件的内容。i 进入编辑模式,ZZ 或者 :wq 保存退出。

image-20230522145705145

image-20230522145637454

​ 通过 git diff "文件" 就可以查看新增内容。

image-20230522150117923

三、Git 基本操作

(一)Git 基本命令

1、git clone

​ 使用 git clone repo directory,就可以将 gitee 或者 github 上的项目克隆到本地,当然你如果直接用的话可以直接 Download Zip,但是通过 git clone 命令就可以将所有的分支下载到本地进行开发。

image-20230522151623061

image-20230522151703161

2、git add

​ git add 命令可将该文件添加到暂存区。

3、git diff

​ git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。

4、git commit

​ 使用 git add 命令将想要快照的内容写入缓存区,而执行 git commit 将缓存区内容添加到仓库中。如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。

5、git rm

​ git rm 指令可以删除提交到 版本库 中的文件。

​ 如果只是想简单从工作目录手动删除文件,运行 git status 时就会在 Changes not staged for commit 提示,在这里同 Linux 一样使用 rm 即可删除文件,说句废话就是直接删除。

image-20230523142854002

image-20230523142938844

​ 要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以用以下命令完成此项工作 git rm file

image-20230523142439734

​ ⏬使用 git rm 删除没有 add 到缓存区中的文件,fatal。

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git rm C.txt
fatal: pathspec 'C.txt' did not match any files

​ ⏬将 C.txt add 到暂存区中,使用 git rm 删除,error。

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git add C.txt

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   C.txt

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git rm C.txt
error: the following file has changes staged in the index:
    C.txt
(use --cached to keep the file, or -f to force removal)

⏬将 C.txt commit 到本地版本库中,使用 git rm 删除,可以看到本地的 C.txt 也跟着没了,git status 可以看到删除 C 确实被记录了。

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git commit C.txt -m "commit C"
[master 1e2edb9] commit C
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 C.txt

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git status
On branch master
nothing to commit, working tree clean

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git rm C.txt
rm 'C.txt'

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    C.txt

image-20230523143626770

6、git mv

​ 典中典的 移动重命名 操作,相信用过 Linux 的应该很熟悉

​ 由于只是修改了文件,并没有新增文件,所以直接 git commit 就可以了。

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git mv A.txt AA.txt

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        renamed:    A.txt -> AA.txt
        deleted:    C.txt

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git commit -m "change file name"
[master 092f8b8] change file name
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename A.txt => AA.txt (100%)
 delete mode 100644 C.txt
 
 Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git status
On branch master
nothing to commit, working tree clean

image-20230523144155412

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git mv AA.txt tempSpace

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        renamed:    AA.txt -> tempSpace/AA.txt
        
Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git commit -m "remove AA to tempSpace"
[master ac1a05a] remove AA to tempSpace
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename AA.txt => tempSpace/AA.txt (100%)

image-20230523145005015

7、git log

​ 使用 git log 查看所有的操作记录

image-20230523145402887

​ 使用 git log --oneline 可以查看更简洁的日志

image-20230523145540235

(二)回滚

​ 通过 git reset [--soft | --mixed | --hard] [HEAD] 进行回滚

​ –mixed为默认的,可以不用带该参数

​ –soft用于回退到某个版本

​ –hard 参数撤销工作区中所有未提交的修改内容

image-20230523192225853

image-20230523192901694

​ 回到和之前一样的效果。

Arc@Arc MINGW64 ~/Desktop/Git (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    A.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        tempSpace/

四、git 可视化

​ 可以使用 王八Git 或者 SourceTree ,实在不想去官网可以下载我分享的百度云:链接 ,使用 王八git 一路 next 就可以了,官网还有官方给的汉化包。

image-20230523194629593

​ 在变更 A.txt 的内容后可以直接通过 TorGit 进行提交;

image-20230523211111219

​ 双击选中的文件就能比较和之前相比修改了哪里。

image-20230523211145371

image-20230523211302290

image-20230523211348960

​ 同样也可以使用 TorGit 来查看日志和回滚。

image-20230523211422598

五、在 Idea 中配置 Git

​ File -> Settings -> 版本控制,找到 Git 那一栏选择 git.exe 的文件路径,点击测试,能够显示出 Git 的版本就说明配置成功了,点击应用就算配置完成了。

image-20230523212056772

​ 创建一个 mvn 工程并且将其初始化为一个仓库

image-20230523213233698

​ 回到项目中你就会发现出现了一个新的功能栏;

image-20230523213359228

​ 我们随便新建一个 java 类,这时候 idea可能会提示我们提交,不用管他。

​ 写完之后可以选择打开终端输入 git 指令进行 add 、commit 操作;

image-20230523214101644

​ 如果你嫌麻烦的话直接点击这边的 commit (在 idea 中他会自动 add),选择想要上传到版本库中的文件,写好日志,点击提交即可。

image-20230523214258359

​ can can 日志如下:

image-20230523214342393

​ 如果修改了某些东西 Idea 也会检测到,并会在页面内展示两个版本的内容。

image-20230523214549815

​ 直接在控制台看日志,这不比王八 Git 好用?

image-20230523214625826

六、Git 的分支

​ 在 git 中,分支指的是从主线上分离出来进行另外的操作,既不影响主线,主线又可以继续干它的事,它可用来解决临时需求;当分支做完事后可合并到主线上,而分支的任务完成可以删掉了。

​ 比如说一个项目交给 A、B、C 三人进行三个模块的新功能开发,肯定不能从原来的代码上改动,势必要分出一条分支来作为自己的开发内容,三人都开发完成后将三个分支合并,就得到了最终的开发结果。

image-20230524153652695

(一)创建分支

​ 通过 git branch [name] 命令或者 王八Git 等可视化工具都可创建新的分支,使用 git checkout 切换分支;或者直接使用 git checkout -b [name] 完成分支的创建和切换。

image-20230524154033027

​ 在 dev 分支的基础上新建一个 AAA.txt 并提交。

image-20230524154532413

​ 返回 master 分支发现 AAA.txt 消失了,再次切换回 dev 分支 AAA.txt 就会出现。

image-20230524154626070

(二)合并分支

​ 在创建分支 dev 之前,master 中就有 .idea、.src、pom.xml 文件,所以当从 master 上复制出来 dev 分支,这些文件依然保留,如果对于 dev 分支已经开发完成(项目组的所有分支已经完成),可以合并到主分支让所有的开发者能看见完整的项目。

​ 使用 git merge [name] 将分支合并回当前分支,可见 dev 分支下的 AAA.txt 也出现在了 master 分支。

image-20230524155341718

​ 此时 HEAD 指向 master 分支,在日志中也可见 master 和 dev 进行了一次合并。

image-20230524155928392

(三)删除分支

​ 在上边使用 git merge 合并分支后我们发现只是 HEAD 指向了当前分支(即执行 merge 命令的分支),但是 dev 分支然然存在,使用 git branch -d [name] 即可彻底移除分支。

image-20230524160446834

(四)分支冲突

​ 合并分支时,两个分支在同一文件的同一位置有着不同的修改,这时git无法替代我们保留哪一个,需要我们手动介入修改。

graph LR 1[Master include A.txt] --A.txt--> 2[dev1 change A second line] -->4[Master] 1[Master include A.txt] --A.txt--> 3[dev2 change A second line] -->4[Master]

​ 如上图,master 中有个 A.txt 文件,分支 dev1 和分支 dev2 都对 A 的第二行进行了修改,那么在合并的时候就会产生冲突。

#文件 A.txt 已经在 master 分支中 commit

image-20230524180845449

image-20230524181041746

#将 dev1 分支合并到 master
Arc@Arc MINGW64 /d/MyCodeWorkSpace/GitTest (master)
$ git merge dev1
Updating ad9269c..19c1b22
Fast-forward
 A.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
#将 dev2 分支合并到 master
Arc@Arc MINGW64 /d/MyCodeWorkSpace/GitTest (master)
$ git merge dev2
Auto-merging A.txt
CONFLICT (content): Merge conflict in A.txt
Automatic merge failed; fix conflicts and then commit the result.

​ 很明显这种操作会引发冲突,在 master 分支的 A.txt 文件内容会变成下面这样,master 分支的状态也显示合并中,并且红字标出信息表示两个分支都对 A.txt 进行了更改。

image-20230524183505288

image-20230524183633507

​ 当 git 不能自动合并分支内容时,就需要手动合并两个分支中的内容,这样就相当于两个人都对 A 做了修改,但是需要比较一下这两个人写的代码的区别,所以 dev1 和 dev2 做出的修改我们都保存。

image-20230524183934407


Arc@Arc MINGW64 /d/MyCodeWorkSpace/GitTest (master)
$ git log --oneline
d109cbe (HEAD -> master) 解决了dev1和dev2的冲突
e3d7a2a (dev2) commit A in dev2
19c1b22 (dev1) commit A in dev1
ad9269c master commit A
fff6198 on dev commit
a761ec1 添加了一个工具包依赖项
9375007 添加了一个叫Use的类

七、在 IDEA 中操作分支

​ 新建的项目可以在 VCS 中初始化仓库,不需要 git init即可。

image-20230524185213758

(一)新建分支

​ 在右下角显示当前分支,可以在这里新建分支;

image-20230524185534791

image-20230524185618336

image-20230524185846925

(二)Merge 和 rollback

​ 签出(checkout)到 master 在 git 选项卡中就可以合并别的分支;

image-20230524190510932

image-20230524190551672

​ 在左下角的 git 选项中可以看到提交日志,并可以进行回滚等操作。

image-20230524190843231

​ User 没辣。

image-20230524190856003

八、远程仓库

​ 这里使用的是 码云,在 gitee 中新建一个空的仓库克隆到本地,为了省时间我直接把 src 和 pom 复制到本地了;

image-20230524195717805

image-20230524195738486

image-20230524203044513

​ 回到 IDEA 中打开刚才 clone 的项目,在点击右上角的中间绿色对号到提交页面(可能 IDEA 版本不同出现的不一样,我的一开始也是悬浮的,上面有个切换到新界面的提示);

image-20230524205050910

​ 提交就是我们熟悉的 提交到本地仓库,提交并推送就可以把更改 push 到远程仓库了。

image-20230524205335240

image-20230524205423186

​ 在 Gitee 的设置中可以选择公开来让大家一起编辑;

image-20230524205659371

​ 对于做出的修改,在 IDEA 中也能通过拉取的形式同步到本地仓库。

image-20230524205838025

image-20230524210029501

标签:Git,git,入门,Arc,master,使用,txt,分支
From: https://www.cnblogs.com/purearc/p/17429529.html

相关文章

  • 【Git用法】如何将本地项目上传到码云,只需这几步,每个步骤都有图文
    想要往码云里上传一个项目文件,首先,我们需要的工具有:①gitshell(用来敲git指令)②你自己的码云账号第一步,要注册一个码云账号,很简单,不过多复述,注册成功后登录,接下来进行第二步;第二步,点击右上方的加号中“新建项目”一项然后填写基本信息,点击创建即可第三步,安装gitshell(我的是安装Git......
  • @Transactional(rollbackFor=Exception.class)的使用
    引言:最近在优化项目的代码,然后使用的是阿里的P3C代码规范检查,然后就出现了如下的提示。方法【create】需要在Transactional注解指定rollbackFor或者在方法中显示的rollback。原因:解决方案之一:在此方法@Transactional注解后面加上(rollbackFor=Exception.class),如图所示:解决方案之......
  • 【SQL用法】Mybatis框架中的xml文件中经常使用的sql语句
    本文目录一、insert语句二、select查询语句三、批量添加四、与时间比较相关的项目中经常会用到的sql语句有:一、insert语句<!--保存用户信息--><insertid="save">insertintomainsite_product_message<trimprefix="("suffix=")"suffixOverrides=","......
  • CMake入门教程:从零开始构建C/C++项目
    CMake是一个跨平台的自动化构建工具,可以用于构建各种类型的项目,包括*C++、C、Python、Java*等。本文将从零开始,介绍如何使用CMake构建一个简单的C/C++项目安装CMake首先,需要下载并安装CMake。可以从CMake官网下载。如果404NotFound,可以试一下这个国内镜像网址下载地址。创......
  • 使用命令清除vSphere Web界面中无法删除的分区​
    在vSpherevSAN的项目中,要求添加到磁盘组的磁盘是未使用的。如果磁盘已经使用过,可以在vSphereClient的界面中清除磁盘分区,将磁盘分区清除后再添加到磁盘组中。如图1所示,在vSphereClient中,在导航窗格中选择主机,在右侧“配置→存储→存储设备”选项中,在“数据存储”列表中查找显示......
  • 使用布尔代数解耦业务
    业务背景有这样一个场景,数据供应商定期提供一次海量的数据,把这些数据存储到Hadoophive中去,但是这些数据和我们系统是不通用的,需要先进行分析以便于我们的系统能够识别这些数据,具体的分析过程省略,最后生成一个mapping关系数据,存储着两边的标志key和数据的生命周期。目前的......
  • [转]Pelco-D协议使用
    1.Pelco-D协议格式如下图所示:2.通用示例为:水平向右控制FFaddress0002Hspeed00checksum水平向左控制FFaddress0004Hspeed00checksum俯仰向上控制FFaddress000800Vspeedchecksum俯仰向下控制FFaddress001000Vspeedchecksum变倍加控制FFaddress00......
  • 【踩坑记录】autojs使用while(1)导致broadcast无法正常执行
    autojs中的死循环操作最好使用setInterval而不是,while(1)。 while(1)会导致其他语句无法执行,这里面包括了信号相关的,比如今天踩得坑: 用events.broadcast.emit发出信号后,相应的on语句无法正常执行,后来才发现原来是为了一个用while(1)来执行死循环导致整个线程全部死在了这里,......
  • CMake入门教程:从零开始构建C/C++项目
    CMake是一个跨平台的自动化构建工具,可以用于构建各种类型的项目,包括C++、C、Python、Java等。本文将从零开始,介绍如何使用CMake构建一个简单的C/C++项目安装CMake首先,需要下载并安装CMake。可以从CMake官网下载。如果404NotFound,可以试一下这个国内镜像网址下载地址。创......
  • 源代码管理工具——Github
    一、搜索资源Github注册完成之后,进入主界面,左上角为资源搜索区域,可以全网搜索自己想要找到的资源。我们可以在搜索结果里选择自己需要的项目,同时可以筛选语言。进入项目过后,可以查看到整个项目的架构,以及通过绿标下载源代码。一个完整的项目界面包括以下部分:1.项目作者......