版本控制 - Git使用指南

前端开发·教程·资源 · 2022-07-15

如何安装Git

您可以从官方网站下载并安装Git。

如果您在Windows上使用它,请确保将Git添加到环境变量Path中。

如果有安装Scoop,您可以使用以下命令直接从终端安装它:

scoop install git

安装完成后,您可以通过执行以下命令来检查Git是否安装正确:

git --version

如果您获得当前安装的版本,则安装成功,您就可以开始了。

Git基础知识

现在让我们通过一些小例子来学习Git的基础知识。

首先,让我们讨论如何为代码创建单一的真实来源。

在 Git 中,存储代码的地方称为repository。

如何初始化一个空的 Git 存储库

在项目中使用Git 的第一步是初始化Git存储库。您可以使用以下命令初始化Git存储库:

git init
#Initialized empty Git repository in C:/Users/Admin/git demo/.git/

此命令在当前目录中创建一个子目录.git。它将保存所有内部 Git 元数据,例如提交历史记录。

如何在 Git 中暂存更改

我们需要创建一些文件来暂存更改并进行提交(我将在下面讨论)。让我们创建test.txt并在其中插入一些文本。

暂存意味着告诉 Git 您准备将哪些文件提交(添加)到存储库。当您正在进行工作并想要提交单个文件时,它非常有用。

现在,我们已准备好进行更改。您可以单独列出要暂存的文件,如下所示:

git add test.txt

一旦我们执行了这个命令,Git 就知道test.txt已经准备好提交了。

或者,您可以使用以下命令暂存所有文件:

git add .

当您有一堆文件并且不想键入每个文件名时,它很有用。

如何在 Git 中提交更改

提交更改会在给定的时间点创建代码库的快照。您可以稍后返回此快照或与您的队友共享,以便他们可以从您的进度中积累。

请记住,只有为提交暂存的文件才会包含在其中。如果你不暂存任何东西,你将无法提交。

在暂存我们的更改之后,是时候提交更改了。要提交更改,请使用:

git commit -m "<message describing the change>"

一旦我们执行了git commit,我们就完成了对代码库的更改。

git commit -m "init text"      
# [master (root-commit) d8fdb41] init text
# 1 file changed, 1 insertion(+)
# create mode 100644 test.txt
给代码写注释是一种良好的美德,给Git写提交信息也是。在很多集成git的ide中,没有填写提交信息是不能进行提交的,提交信息也可以帮助你快速定位到你修改的地方,以及做了哪些改动。相信我,写了提交信息会让你对你所做的工作有个更清晰的了解。

如何在 Git 中查看状态

我们怎么知道哪些文件是新添加的,哪些文件已经加入了暂存区域呢?我们可以随时随地都可以使用git status查看当前状态

$ git status
On branch sec
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

如何在 Git 中查看日志

您可能希望查看项目更改的日志。您可以使用以下命令执行此操作:

git log

# 结果如下
commit d8fdb41555bcb423a192d1f7c517e3b2687fbc00 (HEAD -> master)
Author: gonwe <gonwe@qq.com>
Date:   Fri Jul 15 10:57:24 2022 +0800
Tips:Git 不会自动跟踪您所做的更改。您应该手动暂存和提交它们。

如何在 Git 中创建标签(tag)

为软件发布创建标签是推荐的。这个概念早已存在,在 SVN 中也有。你可以执行如下命令创建一个叫做 1.0.0 的标签:

git tag 1.0.0 1b2e1d63ff

1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。可以使用下列命令获取提交 ID:

git log

你也可以使用少一点的提交 ID 前几位,只要它的指向具有唯一性。

如何在Git中比较文件

git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。

git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。

git diff 有两个主要的应用场景。

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat

显示暂存区和工作区的差异:

$ git diff [file]

显示暂存区和上一次提交(commit)的差异:

$ git diff --cached [file]
或
$ git diff --staged [file]

显示两次提交之间的差异:

$ git diff [first-branch]...[second-branch]

如何在 Git 中重置和恢复提交

如果您在提交中犯了错误,您可能想要撤销更改。

有两种方法可以撤消更改:Reset、Revert;

一、Git重置(Reset)

重置命令的一般语法如下所示: git reset <reset types> HEAD~<number of commits to undo>

最常用的重置类型是:

  • --soft :取消提交并保持更改
  • --hard :取消提交和删除更改

如果我们想从 Git 中取消提交更改,但保留对代码的本地修改,我们使用以下命令:

git reset --soft HEAD~1

当您不小心暂存了一些不属于提交的文件时,它很有用。

重置后,您可以暂存必要的更改并提交它们。

二、Git 还原(Revert)

您可能还注意到,每个提交都与一个hash值相关联。

commit 76d0e4631afd48b6f81c188d104eaa52d92b97a4 (HEAD -> master) # hash值
Author: gonwe <gonwe@qq.com>
Date:   Fri Jul 15 11:10:35 2022 +0800

    update text

commit f6a00a0474e1e12206d5211e96dc8526a9b0ad1c # hash值
Author: gonwe <gonwe@qq.com>
Date:   Fri Jul 15 11:01:25 2022 +0800

    init text

您还可以使用hash值来撤销特定的提交:

git revert 76d0e4631afd48b6f81c188d104eaa52d92b97a4

这与重置不同,因为它允许您撤销在特定提交中所做的更改。

在我们分解命令的时候,我们发现git revert <commit hash>在您还原更改时,Git 会添加一个额外的提交。

commit e2df264ac86a3717925a68300e2539cf1a7520d1 (HEAD -> master) # 额外的提交
Author: gonwe <gonwe@qq.com>
Date:   Fri Jul 15 11:12:05 2022 +0800

    Revert "update text"

    This reverts commit 76d0e4631afd48b6f81c188d104eaa52d92b97a4.

commit 76d0e4631afd48b6f81c188d104eaa52d92b97a4
Author: gonwe <gonwe@qq.com>
Date:   Fri Jul 15 11:10:35 2022 +0800

    update text

commit f6a00a0474e1e12206d5211e96dc8526a9b0ad1c
Author: gonwe <gonwe@qq.com>
Date:   Fri Jul 15 11:01:25 2022 +0800

    init text

如何使用 Git 分支

Git 允许您创建不同的分支。这些分支使您可以将代码版本的范围分开(例如,错误修复、开发、生产等——所有不同的分支)。

列出分支基本命令:

git branch

没有参数时,git branch 会列出你在本地的分支。

$ git branch
* master

要创建新分支,请使用以下命令:

# 创建分支命令:
git branch (branchname) 
# 切换分支命令:
git checkout (branchname)

# 创建并切换到分支命令:
git checkout -b <new branch name>

要切换到现有分支,请删除-b标志并使用现有分支名称而不是新分支名称:

git checkout <branch name>

如何合并 Git 分支

在分支中进行切换后,您可能希望使用另一个分支的代码更新主分支。为此,首先移动到要更新的分支并使用以下命令:

git merge <update source branch name>
如果一切顺利,此操作将在目标分支中创建一个合并提交,并在那里添加所有提交。

开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支

# 先切换到dev分支
git checkout dev

# 更新最新的dev分支
git pull

# 切换到master分支
git checkout master

# 合并dev分支
git merge dev

# 更新合并的分支
git push -u origin master

如何合并上游分支(upstream)

一个分支的upstream,其实就是与远程分支做关联,告诉git,默认此分支为推送及拉取的远程分支的信息。

#设置上游远程仓库
git remote add upstream  xxx.git   

#同步远程仓库
git fetch upstream 

#仓库同步一下origin仓库
git fetch origin 

#合并上游远程仓库master分支
git merge upstream/master 

如何解决 Git 中的冲突

在合并分支时,可能会发生在每个分支中更新同一文件的相同部分的情况。

在这种情况下,会发生冲突,因为Git不知道要保留哪些更改以及要放弃哪些更改。所以 Git 创建了一个冲突消息,并提示你手动选择哪个分支是正确的。

git merge master

# error: Your local changes to the following files would be overwritten by merge:
        test.txt
# Please commit your changes or stash them before you merge.
# Aborting
# Updating a400e7e..3ea62b9

冲突消息概述了冲突发生的位置以及当前和传入的更改。

<<<<<<< HEAD
EJ0RU02版本控制冲突
=======
git 版本控制冲突
>>>>>>> master

决定如何解决冲突后,需要添加一个commit来解决冲突。

如何修改已经提交的 commit 信息

一、修改最近一次的commit信息

# 使用 --amend 命令
git commit --amend

# 进入vim操作界面之后, 点击字母键 i 进入INSERT模式,然后对commit信息进行修改,
$ i
# 先按 ESC 然后输入 wq 保存退出
$ :wq 

# 打印日志会发现最近的一次commit信息被修改成功了
git log 

二、修改已提交到远程的commit信息

# 首先回撤到上一次提交,不修改本次提交的改动 
git reset --soft HEAD~1

# 重新做一次提交 
git commit -m "重新提交commit信息"

# 强推本地分支到远程仓库
git push -f origin master

# 查看远程仓库中的是否已经修改commit信息

如何使用远程 Git 存储库

要与他人协作,您需要处理远程存储库。我们将专注于如何与GitHub合作使用Git,但您可以使用任何其他类似的站点,如GitLab或gitee。

步骤:

  1. 找到您想要贡献的存储库。或者,如果您在公司环境中工作,您的公司可能会提供一个存储库供您使用。
  2. fork存储库。现在你有一个存储库的副本。
  3. 复制找到的克隆链接
  4. 执行以下命令:
   git clone <clone link>

将在您的计算机上创建存储库的副本。添加上游远程,只是源存储库的一个别称,使用:

   git remote add <upstream remote name> <source repository clone link>

现在您可以使用您学到的Git基础知识来修改代码。

提交更改后,您可以使用以下命令更新源存储库:

   git push origin <branch name to push changes>

现在您可以在源存储库中创建一个Pull Request,维护人员将审查并合并您的代码。

如何生成和使用SSH密钥

Git是一个开源的分布式版本控制系统,可以高效敏捷的处理任何项目,用于帮助管理Linux内核开发。而生成一个ssh是十分必要的,可以使电脑和code服务器之间建立安全的加密连接。下面是生成ssh密钥的方法:

  1. 在命令窗口配置用户信息,输入命令
# 配置用户名
git config --global user.name "userName"

# 配置邮箱
git config --global user.email "userName@email.cn"
  1. 生成SSH公钥和私钥
# 生成SSH公钥和私钥
ssh-keygen -t rsa -C "userName@email.cn"
注意:ssh命令中-keygen前切勿加空格,否则报错
  1. 查看SSH公钥和私钥
# 查看SSH公钥和私钥
cat ~/.ssh/id_rsa.pub

# SSH公钥和私钥格式
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC363BqC4a1YeOg4PgyTmjxAOHooA5y4AYNZQIohcIGnuccPcPE4FUzFdMBfhS0/pXHMt8MTZTjI/qh33uN4fXN+JGOULioBd5KFhIX64vS3o8cArWTsa9fAqeW70+mzP+FOPDU+5rOr9LNW/45cv2+yvMsn+K3FPsStadLlLuXWzKOw8cLP1hQOA7HZnugLFAVdaFWq6E9OtRKIiDN+fdbvrBsy2yrfBOdxLkt7uHyHUClJ1xLH6PUO2WTl8TgmEyo+ok53eDwYFZdJX84D0VIfIgxLBuorfRgwNiJjfo8NBAKSAKOVZqF+WFK7w47vnspTJRa/xjqRvQdjs44YGLt7gPwaPq0W0SyEn7KjP2Qd0Ev9DVvdkbIa8hU0U7XZ81N1K7meyjpwFJZ2alnPVgX4gJFTHSQuRLk0A9TQyiLB5oNxi9ZkrVQ9XjfwRX94F9enMjols4rBCDydBkJZRs6Xkev3PwVL2mbJNfGxsnEHhp7hy4TEl31SW+LWXrbDN0= userName@email.cn
  1. 使用SSH密钥

    登陆Git网页(Github / Gitee ...),打开设置,选择SSH公钥配置,复制粘贴公钥即可

Git实用小贴士

# 内建的图形化 git:
$ gitk

# 彩色的 git 输出:
$ git config color.ui true

# 显示历史记录时,每个提交的信息只显示一行:
$ git config format.pretty oneline

# 交互式添加文件到暂存区:
$ git add -i
git 版本控制 upstream SSH
Theme Jasmine by Kent Liao