如何安装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。
步骤:
- 找到您想要贡献的存储库。或者,如果您在公司环境中工作,您的公司可能会提供一个存储库供您使用。
- fork存储库。现在你有一个存储库的副本。
- 复制找到的克隆链接
- 执行以下命令:
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密钥的方法:
- 在命令窗口配置用户信息,输入命令
# 配置用户名
git config --global user.name "userName"
# 配置邮箱
git config --global user.email "userName@email.cn"
- 生成SSH公钥和私钥
# 生成SSH公钥和私钥
ssh-keygen -t rsa -C "userName@email.cn"
注意:ssh命令中-keygen前切勿加空格,否则报错
- 查看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
使用SSH密钥
登陆Git网页(Github / Gitee ...),打开设置,选择SSH公钥配置,复制粘贴公钥即可
Git实用小贴士
# 内建的图形化 git:
$ gitk
# 彩色的 git 输出:
$ git config color.ui true
# 显示历史记录时,每个提交的信息只显示一行:
$ git config format.pretty oneline
# 交互式添加文件到暂存区:
$ git add -i