当前位置:   article > 正文

一文精通Git,Git使用指南

git使用指南

1.Git概述

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。

Git 与 SVN 区别点:

  • Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别
  • Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs等的文件夹里
  • Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录
  • Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征
  • Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏

在这里插入图片描述


2.Git 工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

在这里插入图片描述


3.Git 工作区、暂存区和版本库

我们先来理解下 Git 工作区、暂存区和版本库概念:

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

在这里插入图片描述


4.设置用户签名

这是必须要做的事情,否则git的提交将会发生错误

注意,此处设置的用户签名和Github上的信息没有直接的关系

替换xxx和yyy为你自己的信息即可

git config --global user.name xxx
git config --global user.email yyy@qq.com
  • 1
  • 2

另外,我们可以使用如下命令提高命令输出的可读性:

这样一来,各种命令的输出就会变得更容易分辨

git config --global color.ui auto
  • 1

配置完成后,还可以查看配置信息进行检查:

git config --global --list
  • 1

5.基本命令

初始化本地库

Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

git init
  • 1

查看本地库状态

git status
  • 1

如果是初始化的库,将会显示如下信息:

On branch master # 当前在master分支

No commits yet # 没有文件待提交

nothing to commit (create/copy files and use "git add" to track)
  • 1
  • 2
  • 3
  • 4
  • 5

如果您新建了新的提交文件,比如hello.txt,再次执行查看本地库状态的命令,将会收到如下的信息:

On branch master

No commits yet

Untracked files: # 存在新的未被追踪的文件,hello.txt
  (use "git add <file>..." to include in what will be committed)
        hello.txt

nothing added to commit but untracked files present (use "git add" to track)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

添加文件到暂存区

git add .
  • 1

add命令支持通配符操作:

git add *    # 添加所有文件
git add *.txt  # 添加所有txt类型的文件
  • 1
  • 2

执行完add操作后,再次查看本地库状态:

On branch master

No commits yet

Changes to be committed: # 新的文件已经暂存到暂存区
  (use "git rm --cached <file>..." to unstage)
        new file:   hello.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如果您想删除暂存区的某个文件,可以使用如下命令:(此操作不会将本地的文件删除,只会删除暂存区里的文件)

git rm --cached hello.txt
  • 1

提交本地库

提交暂存区的所有文件到本地仓库,如下语句携带一个-m参数,这个参数后面是本次提交的提示信息,您需要根据本次提交的信息进行自定义

git commit -m "init project"
  • 1

一个好的 Git 提交消息如下:

标题行:用这一行来描述和解释你的这次提交

主体部分可以是很少的几行,来加入更多的细节来解释提交,最好是能给出一些相关的背景或者解释这个提交能修复和解决什么问题。

主体部分当然也可以有几段,但是一定要注意换行和句子不要太长。因为这样在使用 "git log" 的时候会有缩进比较好看。
  • 1
  • 2
  • 3
  • 4
  • 5

提交完成后,如果提交成功,将会输出本次提交的版本号:

[master (root-commit) 949d76f]
  • 1

此外,我们还可以查看本地库的所有版本信息:

git reflog
  • 1

查看详细版本历史提交信息:

git log
  • 1

可以添加一些参数来查看自己希望看到的内容:

git log --author=bob  # 只看bob的提交记录
  • 1

修改提交信息:

要修改上一条提交信息,可以使用git commit --amend命令

dahe@Dahe-Windows MINGW64 /d/SysData/mine/桌面/gittest (dahe)
$ git reflog
1828edb (HEAD -> dahe) HEAD@{0}: commit: 新增txt测试文
件
625efb9 (origin/main, origin/HEAD, main) HEAD@{1}: checkout: moving from main to dahe
625efb9 (origin/main, origin/HEAD, main) HEAD@{2}: clone: from github.com:dahezhiquan/gittest.git

dahe@Dahe-Windows MINGW64 /d/SysData/mine/桌面/gittest (dahe)
$ git commit --amend
[dahe 832f438] dahe新增txt测试文件
 Date: Sat Oct 8 16:17:48 2022 +0800
 1 file changed, 1 insertion(+)
 create mode 100644 hello.txt

dahe@Dahe-Windows MINGW64 /d/SysData/mine/桌面/gittest (dahe)
$ git reflog
832f438 (HEAD -> dahe) HEAD@{0}: commit (amend): dahe新增txt测试文件
1828edb HEAD@{1}: commit: 新增txt测试文件
625efb9 (origin/main, origin/HEAD, main) HEAD@{2}: checkout: moving from main to dahe
625efb9 (origin/main, origin/HEAD, main) HEAD@{3}: clone: from github.com:dahezhiquan/gittest.git
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

版本穿梭

git支持在不同的版本之间进行穿梭

当您回退到其他版本时,本地的代码也会发生相应的变化

git reset --hard 0712165(版本号)
  • 1

6.分支

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

在这里插入图片描述

Git 分支实际上是指向更改快照的指针。

有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来。

查看当前本地的所有分支

当前所在的分支,由绿色标识:

git branch -v
  • 1

创建分支

git branch <branch-name>
  • 1

切换分支

git checkout <branch-name>
  • 1

创建并切换分支:

dahe@Dahe-Windows MINGW64 /d/SysData/mine/桌面/gittest (main)
$ git checkout -b dahe
Switched to a new branch 'dahe'

dahe@Dahe-Windows MINGW64 /d/SysData/mine/桌面/gittest (dahe)
$ git branch
* dahe
  main
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

切换到某一分支后,将在某一分支进行工作,不同分支之间互不影响,如果原分支和切换后的分支文件内容不一致,那么git会进行同步修改操作!

分支合并

将指定的分支合并到当前分支上

例如当前分支是master,执行:

 git merge hot-fix
  • 1

这将会把hot-fix分支上的内容合并到master分支上,也就是文件内容会做同步更改

冲突合并

git 冲突出现的场景很多,git rebasegit pullgit mergegit cherry-pick, 等命令都有可能出现冲突,其实他们的本质是相同的。

两个分支各自都有新的提交,且都对代码同一行进行了修改,现在想将两个分支进行合并,就发生冲突了。

文字有点绕,看看下图:

在这里插入图片描述

我和同事都拿到一份提交历史为 a,b 的代码,我们两个都对同一部分代码进行修改并提交,分别为 c 和 d。
现在要将两个提交进行合并,git 不知道应该采用哪个修改,于是就提示冲突,让我们人为进行修改。

假设我们合并分支的时候两个分支的同一个文件的同一个位置(hello.txt)被修改,那么Git会出现如下的错误信息:

Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
  • 1
  • 2
  • 3

意思是Git也无法确定要保留那个修改,此时需要手动解决冲突

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/516815
推荐阅读
相关标签