分布式版本控制工具 - Git

文章目录

    • [1. 概念介绍](#1. 概念介绍)
    • [2. 客户端](#2. 客户端)
      • [2.1 介绍](#2.1 介绍)
      • [2.2 仓库操作](#2.2 仓库操作)
      • [2.3 文件操作](#2.3 文件操作)
      • [2.4 分支原理与操作](#2.4 分支原理与操作)
      • [2.5 标签](#2.5 标签)
      • [2.6 远程仓库](#2.6 远程仓库)
      • [2.7 README与IGNORE](#2.7 README与IGNORE)
    • [3. IDEA集成](#3. IDEA集成)
    • [4. 版本号](#4. 版本号)
      • [4.1 介绍](#4.1 介绍)
      • [4.2 文件操作](#4.2 文件操作)
      • [4.2 分支操作](#4.2 分支操作)
    • [5. 命令](#5. 命令)
      • [5.1 介绍](#5.1 介绍)
      • [5.2 仓库操作](#5.2 仓库操作)
      • [5.3 文件操作](#5.3 文件操作)
      • [5.4 分支操作](#5.4 分支操作)
      • [5.5 标签操作](#5.5 标签操作)
      • [5.6 远程仓库](#5.6 远程仓库)

1. 概念介绍

软件配置管理(SCM,Software Configuration Management)是指通过执行版本控制、变更控制的规程,以及使用合适的配置管理软件,来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护。

Visual SourceSafe(VSS)是美国微软公司出品的版本控制系统,是集中式版本控制系统。

Concurrent Versions System(CVS)是基于客户端/服务器的行为使得其可容纳多用户,构成网络也很方便。也是集中式版本控制系统。

Subversion(SVN)是CVS的升级,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

Git为开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。

版本控制

版本包括软件版本和文件版本。

把每次修改记录下来,防止重要文件丢失等问题。一旦出现问题,可以通过这些修改记录进行恢复数据。

版本控制可以帮我们自动生成版本号。

版本控制软件的基础功能

  • 保存和管理文件
  • 提供客户端工具进行访问
  • 提供不同版本文件的比对功能

集中式版本控制

集中式版本控制存在着一些问题,如文件冲突问题。

VSS采用加锁(读写者问题)的方式来解决这个问题。这种处理方式会导致,对于同一份文件,当一个人处理完成后,下一个人才可以再进行处理,会导致开发效率低下。

CVS,SVN在提交文件时,对文件进行比对,然后进行文件合并,以此来解决文件冲突问题。

分布式版本控制

如果中央服务器宕机了,则会导致整个系统崩溃,数据丢失,会导致严重的问题。所以就出现了分布式版本控制。

这种情况下,如果中央服务器宕机了,但是我们本地的仓库依然存在,用户依然可以对文件进行修改等操作,可以将文件提交到本地仓库,避免数据丢失。当中央服务器恢复时,将本地仓库与中央服务器进行同步。


2. 客户端

2.1 介绍

GitHub Desktop是图形界面客户端。

在左上角Github Desktop中选择settings进行相关配置。

填写Name和Email,为了在修改文件时,让工具知道是哪个用户修改的文件。

2.2 仓库操作

我们选择在本地创建一个新的仓库,填写相关信息。

点击Create Repository创建仓库后,进行新的界面。

我们可以点击ADD再创建一个新仓库,我们将其命名为git-local-test2

当我们不想要该仓库时,可以右键该仓库,选择remove。如果不选择Also move this repository to Recycle Bin,则只是从该工具系统中删除仓库,并不删除文件。如果勾选了,则也会删除实际的文件。

2.3 文件操作

我们在仓库目录下随便创建一个文件,比如a.txt,然后在其中随便写点内容。此时,在客户端工具中就会查看到新创建的文件。

但是此时,我们的文件并没有放入本地仓库中。本地仓库中的文件,其实是在.git隐藏文件夹下的。

当我们点击左下角的commit,就会将操作文件提交到本地仓库中。此时,changes下就没有文件存在了。因为当提交完成后,本地仓库中的内容与仓库目录下的操作文件内容一致,所以无文件变化,changes中就没有文件存在了。

当我们修改文件后,再次提交到本地仓库,相当于创建了一个新的文件,并不会覆盖之前旧的文件。

点击左上角的History,可以查看到我们每次操作的文件变化。

git采用的版本号是由40个16进制的数字组成。版本号也称为提交码。

同样的,当我们删除掉本地文件时,也会在客户端中看到变化。

2.4 分支原理与操作

当我们在多人协作开发时,多人会很多次的提交文件,提交过程是没有任何规律的,这样想对定位到某一次提交,去查看提交了哪些内容,是非常困难的。

另一方面,开发人员在开发不同的功能模块时,可能会修改同一份文件,这样就会可能产生文件冲突,虽然对于文件冲突有解决方案,但是频繁的出现冲突,就会非常麻烦,且存在一些未知的风险。

还有就是我们频繁的修改会产生大量的版本信息,导致仓库的体积越来越大,那么我们再去做定位于文件比对时,其效率也会变得越来越慢。

所以,此时我们就需要使用分支功能。说白了,分支就是当前版本库的一个副本,开发人员可以在这个副本上进行文件操作。在处理完成最后,再将不同的副本进行合并。

这种情况下,只需要在最后合并的时候解决一次文件冲突即可。

在客户端中,我们点击New Branck创建新分支,填写分支名称,选择基于main主分支进行创建,点击Create即可。

我们创建一个order分支和一个user分支。

在user分支中,添加文件user.txt,随便写入一些内容,然后commit提交。此时,我们将分支切换到order,打开文件目录,是看不到user分支下的文件的,当切换为user分支时,又可以在目录下看到user分支下的文件了。

在order分支中,添加文件order.txt,随便写入一些内容,然后commit提交。

此时,我们切换回主分支,可以点击下方按钮,进行分支的合并操作。

选择要合并的分支,点击按钮进行合并。

会看到提示,合并成功。

为了演示合并时产生的文件冲突问题。我们在user分支下创建common.txt文件,里面写入user单词,并commit提交到user分支。然后我们在order分支下创建common.txt文件,里面写入order单词,并提交到order分支。此时,我们切换到主分支,点击合并分支按钮,将user分支合并到主分支。然后,我们再将order分支合并到主分支时,会出现如下提示。

然后我们继续点击Create a merge commit按钮,会出现如下提示。我们可以点击Open in Visual Sublime Text,进入到Sublime中进行查看。

此时,我们可以看到如下冲突信息。

========之上表示现在已经存在的内容,之下表示新合并进来的内容

我们可以将多余内容删除,只留下如下内容,这也就意味着我们选择保留两者。

然后我们点击Continue Merge即可成功合并。

2.5 标签

在我们进行分支合并操作时,我们无法自定义的去添加描述信息。所以我们就可以通过添加标签的形式进行说明。

History中,右键记录,选择Create Tag,然后输入Tag的名称,点击创建即可。

同样,我们也可以通过右键记录,进行Tag的删除操作。

2.6 远程仓库

Github:https://github.com/

在github中,我们创建一个仓库。填写仓库名称remote-test、描述信息、选择仓库是否私有、勾选初始化redeme文件,点击创建即可。

点击Add file可以选择直接创建文件或者上传文件。我们选择创建文件,命名为test.txt,并随便写入一些内容,填写提交描述信息,并且点击commit按钮进行提交创建。

我们再次编辑该文件,然后再次提交。在文件页面中,点击右上角的History即可查看文件的修改记录。

在Code页面中,点击Branch,我们可以填写分支名称,创建新的分支。

我们想要将这个仓库的内容下载到本地,可以在客户端工具中,选择File,点击Clone Repositroy,选择要克隆到仓库以及bacon的路径,点击克隆将仓库克隆到本地。这样就将远程仓库下载到本地了。

我们在这个本地仓库中新建一个文件a.txt,随便添加一些内容。然后在客户端中点击commit将新增文件提交到本地仓库。此时,我们只是将这个新增的文件提交到了本地仓库中,并没有上传至远程仓库。我们要上传至远程仓库,点击Push origin按钮即可。

这样,我们在github远程仓库中就可以看到我们所提交的文件了。

2.7 README与IGNORE

README.md文件用于对仓库进行描述。

注意:对于文件比对功能,只能针对文本文件,对于word、excel、图片等文件无法进行比对。

ignore文件写入需要忽略的文件,被忽略的文件不会进行提交。

在ignore文件中我们可以使用*作为通配符,如*.docx


3. IDEA集成

在IDEA中我们创建一个新的项目。

此时,我们先不勾选Create Git Repository

我们在项目中新建一个文件a.txt,随便写入一些内容。

此时,我们想要将我们的项目上传至github中。

我们选择上方的VCS,选择Share Project on GitHub

由于之前已经配置过github账号,所以此时不会提示让我们进行配置,如果没有配置,则按照步骤进行配置即可。

这里,点击share按钮。会出现如下提示,是让我们将内容提交到本地仓库。此时,我们只勾选a.txt文件。

然后点击add按钮即可。此时,在github远程仓库中就已经有了我们的项目。

我们在本地对a.txt文件进行修改后,文件名称的颜色会发生改变。我们右键该文件,可以出现如下信息。

点击Commit file,填写描述信息,点击commit可以将该文件提交到本地仓库,点击commit and push按钮,然后点击push可以提交到本地仓库并且上传至远程仓库。

我们将远程仓库中的a.txt文件内容修改为ccc。但是此时,我们本地a.txt文件的内容为bbbbbbb。此时会出现我们本地文件与远程仓库文件不统一。我们就要将远程仓库中的文件同步到本地。点击上方工具栏中的Git选项,选择Pull选项,点击pull按钮即可。

为了演示文件冲突,我们将远程仓库中的a.txt文件内容修改为ddd。但是此时,我们本地a.txt文件的内容为ccc,我们将其修改为cccaaa。此时我们再提交a.txt文件。会出现如下提示。

我们点击Merge按钮,出现如下提示。

我们可以直接选择保留本地,或者采用远程文件。或者点击Merge按钮进行人工手动合并文件。我们点击Merge按钮出现如下提示。

左部分为我们本地文件,右边部分为远程仓库文件,中间为合并后的文件。

>>表示Accept,×表示Ignore。

假如我们想同时保留本地和远程的内容,那么就点击两侧的>>或者<<按钮即可。然后点击Apply按钮。

这样便解决了文件冲突,成功将文件提交到了远程仓库。

Gitee

如果想要将项目上传至Gitee仓库,需要在IDEA中安装Gitee插件。


4. 版本号

4.1 介绍

版本号是根据我们当前提交的内容,采用SHA-1加密算法进行生成的。长度为40位。避免了版本号重复冲突。

版本号可以用于定位仓库中的文件。前2位:文件夹,后38位:文件名。可以在.git文件夹下的objects目录中找到。

4.2 文件操作

如果我们想查看.git目录中objects中,通过版本号定位到的文件。可以通过使用git命令行进行查看。

shell 复制代码
git cat-file -p 版本号

# parent为上次提交的版本号
➜  remote-test git:(main) git cat-file -p f8744fb3ee43b9724aa10a70f97147df0b0e6d21
tree f630198fa18b852999ca11dee336afafad9b79d5
parent 27961ee69740f6ad52fc41586090dae410b5ae1f
author Mango1698 <mango_1698@163.com> 1715323425 +0800
committer Mango1698 <mango_1698@163.com> 1715323425 +0800

Create a.txt

提交本地文件

# 可以通过上述返回的信息 tree f630198fa18b852999ca11dee336afafad9b79d5 所给出的版本号,继续查询
# 该文件中是包含了文件的状态信息,同时也包含着文件的版本号
➜  remote-test git:(main) git cat-file -p f630198fa18b852999ca11dee336afafad9b79d5
100644 blob 24a5c29ee326bb4525fbe9bf61d4a20bb1e147ad	README.md
100644 blob 7c4a013e52c76442ab80ee5572399a30373600a2	a.txt
100644 blob a40ead6c4ed495142a6e1b15025cabba7a40485e	test.txt

# 通过文件的版本号继续查询
➜  remote-test git:(main) git cat-file -p 7c4a013e52c76442ab80ee5572399a30373600a2
aaa%
# 这样,文件内容就被查询出来了

4.2 分支操作

.git目录下存在HEAD文件,文件内容如下。该文件指向了一个路径。

txt 复制代码
ref: refs/heads/main

我们可以通过该路径,在.git目录下进行寻找。

打开main文件后,我们看到如下内容。

txt 复制代码
f8744fb3ee43b9724aa10a70f97147df0b0e6d21

这个正是我们最后一次提交的一个版本号。

由此,git就可以方便的判断出,那么多的提交,哪一个是最新的提交。

之所以HEAD文件不直接记录最新的一次提交,反而是只想了main文件,因为我们可能是存在着多个分支。这里的main文件是记录的主分支。

我们创建一个分支user后,并且在user分支中进行一次提交操作,可以看到HEAD中所指向的路径更改了。

同样,我们可以根据该路径可以找到user文件,该文件中记录了该分支最后一次提交。

我们只要切换分支,HEAD文件中的路径就会跟着变化,不是只有发生提交等操作才会变化,而是只要切换分支,就会变化!

同样的,当我们切换分支时,git工作目录下的文件也会随之变化!

比如,我们在主分支下创建了一个b.txt文件,当我们切换到user分支时,是看不到这个文件的。

当我们在user分支下创建了一个c.txt文件,当我们切换到主分支是,同样也是看不到的。

当我们对文件进行修改后,但是并没有提交时,我们此时切换分支,可以选择将变化的文件放入暂存区,或者选择将变化的文件放入我们要切换到的分支。

当我们选择放回暂存区时,可以点击Stashed Changes查看,点击Restore放回Changes列表下。

当我们选择将改变的文件带入新分支时,那么原分支中的文件将恢复成原来内容,不会发生改变!


5. 命令

5.1 介绍

5.2 仓库操作

git -v查看git版本信息

shell 复制代码
➜  remote-test git:(main) ✗ git -v
git version 2.43.0

我们在本地创建一个空的文件夹local-rep-1,在该目录下我们进行git初始化,来构建本地仓库,使用git init命令:

shell 复制代码
➜  local-rep-1 git init
提示:使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中
提示:配置使用初始分支名,并消除这条警告,请执行:
提示:
提示:	git config --global init.defaultBranch <名称>
提示:
提示:除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。
提示:可以通过以下命令重命名刚创建的分支:
提示:
提示:	git branch -m <name>
已初始化空的 Git 仓库于 /Users/shihongwei/myfile/project/project2024/local-rep-1/.git/

可以通过git clone指令下载远程仓库。

shell 复制代码
git clone https://github.com/mango1698/user-management-system.git
# 可以自定义克隆项目要存储的目录名称
# git clone URL 自定义目录名称
git clone https://github.com/mango1698/user-management-system.git customer-project

通过git config命令对git进行配置。

shell 复制代码
git config user.name 用户名称
git config user.email 邮箱

上诉配置只是对单个仓库进行配置,如果我们拥有多个仓库时,一一配置非常麻烦,所以我们可以进行全局配置。

shell 复制代码
git config --global user.name 用户名称
git config --global user.email 邮箱

mac os系统中,git对配置文件在用户目录下。

markdown 复制代码
➜  ~ cat .gitconfig
[user]
	name = Mango1698
	email = mango_1698@163.com
[safe]
	directory = /opt/homebrew
[http]
	version = HTTP/1.1
[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true

如果我们不想使用命令行,也可以通过直接修改该文件进行配置。

5.3 文件操作

我们在刚刚创建的local-rep-1目录下进行操作。

使用git status命令查看暂存区状态。

shell 复制代码
➜  local-rep-1 git:(master) git status
位于分支 master
尚无提交
无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)

我们在该目录下新建a.txt文件。我们再次执行git status命令。

shell 复制代码
➜  local-rep-1 git:(master) ✗ git status
位于分支 master

尚无提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
	a.txt

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

可以看到a.txt文件并未被git追踪,也就是git没有管理a.txt文件。此时,我们可以通过git add指令,将a.txt加入到暂存区,将会被git追踪。git add .表示将该目录下所有文件加入到暂存区中。也可以使用通配符,如git add *.txt进行添加。

shell 复制代码
➜  local-rep-1 git:(master) ✗ git add a.txt

此时,我们再次执行git status命令。

shell 复制代码
➜  local-rep-1 git:(master) ✗ git status
位于分支 master

尚无提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)
	新文件:   a.txt

可以看到a.txt文件已经放入了暂存区中。如果我们想将其从暂存区中移除,可以使用git rm --cached 文件名指令进行移除。

ssh 复制代码
➜  local-rep-1 git:(master) ✗ git rm --cached a.txt
rm 'a.txt'

➜  local-rep-1 git:(master) ✗ git status
位于分支 master

尚无提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
	a.txt

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

我们再使用git add命令将其放回暂存区。

我们可以使用git commit命令将其存放到本地仓库中。通过-m参数来填写描述信息。

shell 复制代码
➜  local-rep-1 git:(master) ✗ git commit -m "新增文件"
[master(根提交) 295ffbd] 新增文件
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
 
➜  local-rep-1 git:(master) git status
位于分支 master
无文件要提交,干净的工作区

可以通过git log来查看提交到历史记录。

shell 复制代码
➜  local-rep-1 git:(master) git log
commit 295ffbdeff63348efc79a13042b439d8bb2b6fae (HEAD -> master)
Author: Mango1698 <mango_1698@163.com>
Date:   Sat May 11 14:36:21 2024 +0800

    新增文件

可以通过--oneline参数来在一行中显示这些信息。

shell 复制代码
➜  local-rep-1 git:(master) git log --oneline
295ffbd (HEAD -> master) 新增文件

当我们修改了a.txt文件后,执行git status命令。

shell 复制代码
➜  local-rep-1 git:(master) ✗ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	修改:     a.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

可以发现,git识别出了我们修改了a.txt文件,我们需要执行git add命令和git commit命令对修改的文件进行提交。

shell 复制代码
➜  local-rep-1 git:(master) ✗ git log --oneline
3c01ead (HEAD -> master) 修改文件
295ffbd 新增文件

当我们删除掉a.txt文件时。

shell 复制代码
➜  local-rep-1 git:(master) git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	删除:     a.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

可以看到git识别出了我们删除了文件。我们通过git addgit commit来提交变化。

shell 复制代码
➜  local-rep-1 git:(master) ✗ git add a.txt

➜  local-rep-1 git:(master) ✗ git commit -m "删除a.txt"
[master a25835d] 删除a.txt
 1 file changed, 2 deletions(-)
 delete mode 100644 a.txt
 
➜  local-rep-1 git:(master) ✗ git log --oneline
a25835d (HEAD -> master) 删除a.txt
3c01ead 修改文件
295ffbd 新增文件

当我们误删除了文件时,我们可以将本地仓库中的文件恢复到工作区。

此时,我们新建一个b.txt文件,并将其提交到本地仓库。然后在文件夹中删除该文件。假如这个过程我们时误删除的,那么,我们便可以使用git restore 文件名命令从本地仓库中将文件恢复。

shell 复制代码
➜  local-rep-1 git:(master) ✗ git restore b.txt
➜  local-rep-1 git:(master) ls
b.txt

但是,假如我们删除了文件,并且通过git addgit commit命令将改动进行提交了,也就意味着本地仓库中的文件也被删除了。此时,我们可以根据版本号,通过git reset --hard 版本号命令进行重置。

shell 复制代码
➜  local-rep-1 git:(master) git log --oneline
d4fab59 (HEAD -> master) 删除b.txt
3a35301 新增b.txt
a25835d 删除a.txt
3c01ead 修改文件
295ffbd 新增文件
# 因为删除b.txt文件是在d4fab59版本进行,所以我们可以恢复至其前一个版本3a35301
➜  local-rep-1 git:(master) git reset --hard 3a35301
HEAD 现在位于 3a35301 新增b.txt

这样工作区和本地仓库中的文件都恢复了。使用git log可以发现:

shell 复制代码
➜  local-rep-1 git:(master) git log --oneline
3a35301 (HEAD -> master) 新增b.txt
a25835d 删除a.txt
3c01ead 修改文件
295ffbd 新增文件

我们目前的最新版本号又回到了3a35301。从版本之后的提交丢失掉了。那么该如何解决这个问题呢?

我们可以使用git revert 版本号命令。

我们在工作区删除b.txt,并通过git addgit commit命令提交。

shell 复制代码
➜  local-rep-1 git:(master) git log --oneline
e233f38 (HEAD -> master) ddd
3a35301 新增b.txt
a25835d 删除a.txt
3c01ead 修改文件
295ffbd 新增文件

可以看到我们是在e233f38版本删除了b.txt文件,那么git revert后的版本号直接写e233f38即可,会帮助我们恢复到它的上一个版本。

shell 复制代码
➜  local-rep-1 git:(master) git revert e233f38

会出现如下提示:

shell 复制代码
Revert "ddd"

This reverts commit e233f38c899fb38271000920a1207df9fec0448c.

# 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
# 说明将会终止提交。
#
# 位于分支 master
# 要提交的变更:
#       新文件:   b.txt
#

然后,我们查看提交记录。

shell 复制代码
➜  local-rep-1 git:(master) git log --oneline
23b38c2 (HEAD -> master) Revert "ddd"
e233f38 ddd
3a35301 新增b.txt
a25835d 删除a.txt
3c01ead 修改文件
295ffbd 新增文件

可以看到e233f38删除b.txt的版本还在,使用git revert命令是又创健了一个最新的版本。

5.4 分支操作

通过git branch 分支名称命令来创建分支。

shell 复制代码
➜  local-rep-1 git:(master) git branch user

可以通过git branch -v来查看所有分支。

shell 复制代码
➜  local-rep-1 git:(master) git branch -v
* master 23b38c2 Revert "ddd"
  user   23b38c2 Revert "ddd"

通过git checkout 分支名称命令来切换分支。

shell 复制代码
➜  local-rep-1 git:(master) git checkout user
切换到分支 'user'
➜  local-rep-1 git:(user)

我们可以将创建分支和切换分支这两部合并为一步操作,通过git chechout -b 分支名称命令。

shell 复制代码
➜  local-rep-1 git:(user) git checkout -b order
切换到一个新分支 'order'
➜  local-rep-1 git:(order)

通过git branch -d 分支名称来删除分支。

shell 复制代码
➜  local-rep-1 git:(order) git branch -d user
已删除分支 user(曾为 23b38c2)。

分支合并处理

目前,我们有两个分支master和order。

我们在master分支下创建c.txt文件,写入内容master,并提交到本地仓库中。

我们在order分支中也添加一个c.txt文件,写入内容order,并提交到仓库中。

我们想要合并分支,首先我们要切换到master分支,将order分支合并到master中。使用git merge命令进行合并。

shell 复制代码
➜  local-rep-1 git:(master) git merge order
自动合并 c.txt
冲突(添加/添加):合并冲突于 c.txt
自动合并失败,修正冲突然后提交修正的结果。

提示我们c.txt文件发生了冲突。此时,我们查看c.txt文件,其中就包含了比对的操作。

删除掉多余的内容,保留我们想要保留的内容,然后重新git addgit commit即可。这样就实现了合并操作,并解决了文件冲突。

5.5 标签操作

当我们提交太多时,通过git log命令查看历史记录会很费劲,我们可以通过git log 版本号的方式来查看该版本及该版本之前的提交记录。

shell 复制代码
git log dd46db18c85aa0b16f55800cf5eacfab7427c8b7
commit dd46db18c85aa0b16f55800cf5eacfab7427c8b7
Author: Mango1698 <mango_1698@163.com>
Date:   Sat May 11 15:28:09 2024 +0800

    create c.txt

commit 23b38c28ea32742ccbabcd53341c60d51f9c2d0c
Author: Mango1698 <mango_1698@163.com>
Date:   Sat May 11 15:05:44 2024 +0800

    Revert "ddd"

    This reverts commit e233f38c899fb38271000920a1207df9fec0448c.

commit e233f38c899fb38271000920a1207df9fec0448c
Author: Mango1698 <mango_1698@163.com>
Date:   Sat May 11 15:04:08 2024 +0800

    ddd
......

但是这种方式,也不太方便,因为版本号太长了。另外,我们不清楚这个版本号对应的是什么操作。所以,我们可以给当前的提交增加一个标记,这个标记称为标签。简单的理解就是,给当前的提交版本增加一个别名,后面我们就可以通过这个别名进行访问。

通过git tag 标签名称 版本号来新增标签。

shell 复制代码
➜  local-rep-1 git:(master) git tag updatefile 29a015d2cc11d2eb2c251d7a4c1d27a4dc60cb1d

通过git tag命令查看所有标签。

shell 复制代码
➜  local-rep-1 git:(master) git tag
updatefile

此时,我们使用git log命令就可以看到tag已经生效了

此外,我们可以通过git log 标签名称进行查看该版本及该版本之前的提交记录。

shell 复制代码
➜  local-rep-1 git:(master) git log updatefile

通过git tag -d 标签名称删除标签。

shell 复制代码
➜  local-rep-1 git:(master) git tag -d updatefile
已删除标签 'updatefile'(曾为 29a015d)

此外,我们可以通过git checkout -b 标签名称来进行分支创建,这个分支的名称与标签名称一致,版本与标签所指的版本一致。

5.6 远程仓库

通过如下指令来增加远程仓库地址:

shell 复制代码
git remote add origin https://xxxxxx

可以通过git remote rename origin进行修改名称,通过git remote rm origin进行删除。

也可以在配置文件中直接修改。

通过git push命令将本地仓库提交到远程。

通过git pull拉取远程仓库。

需要配置SSH安全认证。

通过命令ssh-keygen -t rsa -CUrl进行生成。生成好的文件在用户目录下.ssh目录中,文件名称为id_rsa.pub。将文件内容复制到gitee或者github中进行配置。

Github

Gitee

相关推荐
旺旺大力包24 分钟前
【 Git 】git 的安装和使用
前端·笔记·git
天乐敲代码1 小时前
Etcd静态分布式集群搭建
数据库·分布式·etcd
光纤传感技术研究2 小时前
分布式光纤传感|分布式光纤测温|线型光纤感温火灾探测器DTS|DTS|DAS|BOTDA的行业16年的总结【2024年】
分布式·dts·光纤传感器·botda·光纤传感技术
Domain-zhuo2 小时前
Git和SVN有什么区别?
前端·javascript·vue.js·git·svn·webpack·node.js
dbcat官方2 小时前
1.微服务灰度发布(方案设计)
java·数据库·分布式·微服务·中间件·架构
沛沛老爹3 小时前
CI/CD是什么?
运维·git·ci/cd
明达技术4 小时前
分布式 IO 模块助力冲压机械臂产线实现智能控制
分布式
向阳花花花花4 小时前
git clone 和 conda 换源
git·conda
溟洵5 小时前
【C++】异步(并发)实现 线程池 ---附源码+实现步骤(future、async、promise、package_task、任务池原理和框架)
服务器·网络·c++·分布式·后端
sin220113 小时前
idea集合git使用
git