手把手教你用Git——Git常用技巧分享

3,218 阅读8分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 28 天,点击查看活动详情

前言

背景

由于本社新人并不常用Git,再加上国内的网络并不算好,在这样一个背景下,为了简化Git的使用,我在这里简单记录了一个关于 Git的教程,希望对大家有所帮助。

关于本教程的编写环境

本文基于Windows10系统Mac系统的小伙伴可以尝试Homebrew。由于本人手里并没有搭载MacOS的电脑,因此Homebrew相关的使用请自行尝试。

对于使用 Windows11系统 的小伙伴,本文的教程是通用的,不过一些细节可能略有不同,这点希望小伙伴们注意一下

关于Git

Git 是一个开源的分布式版本控制系统,可以有效、快速的进行项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 ——来自 Git 简介 | 程序员大彬 (topjavaer.cn)

简单来说,Git 就是一个项目代码管理软件

关于本教程的评论

这个教程基于我的个人实践,很多东西基于我个人的理解,所以有望大家多多指教。如果你发现了这个教程的错误之处,欢迎你通过邮箱或者QQ联系我,我会及时的进行改进。如果教程中有表述不清楚的地方,也请指出,或提供建议。

关于本教程的转载

任何个人或组织可以转载我的这个教程系列,甚至可以对其进行一些修改。但前提是要保证实时更新,并且保留本教程的版权信息,谢谢支持,我也会不定时的更新这个系列的教程。

正文

安装与使用

具体安装教程可以看看这个系列的第一期:手把手教你用Git——Git使用教程(一) - 掘金 (juejin.cn)

常用技巧

条件包含 (Include-if)

条件包含 (Include-if) 是一种文本处理语法,它允许在文档中根据条件包含或排除某些文本。在编写具有多个变体或选项的文档时,这种语法特别有用。

语法格式为:

{{#condition}}
    text to include if the condition is true
{{/condition}}

{{#condition}}
    text to include if the condition is true
{{else}}
    text to include if the condition is false
{{/condition}}

其中,condition 可以是任何在文档处理器中可用的条件语句,例如变量、函数或比较操作符等。如果 condition 为真,那么位于 {{#condition}}{{/condition}} 之间的文本将包含在输出中;否则,如果存在 {{else}} 部分,则位于 {{else}}{{/condition}} 之间的文本将被包含在输出中。

例如,当在多个 Git 仓库中工作时,您可能希望为每个仓库提供不同的默认设置,例如默认的用户名、电子邮件地址、缺省分支等。这样做可以避免在提交代码时不小心使用错误的身份或默认分支等问题。

  1. 打开您的 Git 配置文件(~/.gitconfig),并在其中添加以下内容:
[includeIf "gitdir:/path/to/repo1/.git/"]
    path = ~/.gitconfig-repo1
[includeIf "gitdir:/path/to/repo2/.git/"]
    path = ~/.gitconfig-repo2

这将使 Git 检查您的 Git 仓库目录,并为每个仓库使用不同的配置文件。在上面的示例中,如果 Git 仓库的目录是 /path/to/repo1/.git/,则将加载 ~/.gitconfig-repo1 文件中的配置;如果 Git 仓库的目录是 /path/to/repo2/.git/,则将加载 ~/.gitconfig-repo2 文件中的配置。

  1. 在每个配置文件中设置适当的默认设置,例如:
[user]
    name = John Doe
    email = john.doe@example.com
[init]
    defaultBranch = main

在上面的例子中,我们设置了默认的用户名和电子邮件地址,并将默认分支设置为 main

这样做后,当您使用 git init 命令在不同的 Git 仓库中创建新的仓库时,它们将使用各自的默认设置。同样,当您提交代码时,Git 将自动使用正确的身份和分支。

多工作区

Git支持我们创建多工作区,同一个 Git 仓库中创建多个不同的工作区,每个工作区可以包含不同的文件和修改,以便我们可以在不同的任务之间快速切换。例如,我们可以在一个工作区中进行开发,同时在另一个工作区中进行修复缺陷或打补丁。

要创建一个新的工作区,请使用 git worktree 命令,后跟一个新的目录路径。例如,要创建名为 new-workspace 的新工作区,请运行以下命令:

git worktree add new-workspace

这将在当前仓库的根目录中创建一个名为 new-workspace 的新目录,并将其链接到 Git 仓库中的一个分支。您可以在新的工作区中进行修改和提交,而不会影响主工作区或其他工作区。

要切换到不同的工作区,请使用 git worktree list 命令列出所有的工作区。然后,使用 cd 命令进入您要切换到的工作区的目录。例如,要切换到 new-workspace 工作区,请运行以下命令:

cd new-workspace

您可以在新的工作区中执行 git 命令,例如 git statusgit addgit commit,而不会影响其他工作区或主工作区。

要删除工作区,请使用 git worktree remove 命令,并指定要删除的工作区的目录路径。例如,要删除 new-workspace 工作区,请运行以下命令:

git worktree remove new-workspace

这将删除工作区并断开链接到 Git 仓库中的分支。

常用指令

git commit --fixupgit commit --squash 是两个相关的 Git 命令,它们可以让您更轻松地组织您的 Git 提交历史。这些命令通常与 git rebase--autosquash 选项一起使用,以便您可以对提交历史进行重新排列和修改。

git commit --fixup 命令可以创建一个 "修正" 提交,该提交仅包含当前更改所需的内容,但将其标记为要在将来与另一个提交合并。例如,如果您要更改某个文件,但希望在未来将其合并到以前的提交中,可以使用 git commit --fixup 命令创建一个标记该更改的修正提交。修正提交的提交消息应以 fixup! 开头,后跟原始提交的提交消息。

git commit --squash 命令类似于 --fixup,但是它将当前更改合并到先前的提交中,并在提交消息中包含原始提交的提交消息。使用 --squash 选项提交更改时,可以使用 -m 选项为提交消息指定前缀,以便稍后将其与其他提交合并。

当您在 git rebase 命令中使用 --autosquash 选项时,Git 会自动识别标记为 "修正" 或 "合并" 的提交,并将它们放置在要合并到的提交的正确位置。例如,如果您在使用 --autosquash 选项时运行 git rebase -i 命令,并在编辑器中将 pick 命令替换为 squashfixup 命令,Git 将自动将这些提交合并到其他提交中。

总之,使用 git commit --fixupgit commit --squash 命令可以更轻松地组织您的提交历史,并使其更易于阅读和理解。使用 git rebase--autosquash 选项可以进一步简化提交历史的修改过程,以便您可以更轻松地重新排列和编辑提交

在这里,我在介绍一些常用的指令:

1. git init:在一个新项目中创建 Git 仓库。
2.  git clone:在本地复制远程 Git 仓库中的代码,通常用于获取和开始处理一个项目。
3.  git add:将要提交的更改添加到 Git 仓库的暂存区,通常在进行一些小的更改后使用。
4.  git commit:将更改提交到 Git 仓库,通常在对一组文件进行一系列更改后使用。
5.  git push:将本地 Git 仓库中的更改推送到远程 Git 仓库,通常在完成一组更改后使用。
6.  git pull:从远程 Git 仓库获取最新版本的代码并将其合并到本地仓库中,通常在团队中协作开发时使用。
7.  git branch:创建、删除或查看本地分支,通常在进行复杂的开发任务或修复错误时使用。
8.  git merge:将两个分支合并在一起,通常在完成分支开发或修复错误后使用。
9.  git status:查看文件的状态,通常用于检查文件是否被修改或添加到暂存区。
10.  git log:查看 Git 仓库的提交历史记录,通常用于了解项目的开发历程或查找特定提交。
11.  git diff:比较不同版本之间的差异,通常用于查找更改或解决合并冲突。
12.  git stash:将当前的工作目录和暂存区的更改暂时保存,并还原到 Git 仓库的上一版本,通常用于暂时保存未完成的工作。
13.  git tag:用于创建和管理 Git 仓库的标签(版本号),通常用于标记项目的版本。
14.  git remote:列出已配置的远程 Git 仓库,通常用于管理多个远程仓库。
15.  git reset:撤销已提交的更改,并将 Git 仓库回滚到之前的版本,通常用于撤销错误的提交或还原项目到之前的状态。