本文章只提供常用的一些用法,更多的可参考下方的官方文档!

一、基础知识

  1. 安装Git:首先,您需要在您的计算机上安装Git。您可以从Git官网 下载 并安装适合您操作系统的Git版本。
  2. 配置Git:在开始使用Git之前,您需要配置您的用户信息。运行以下命令来设置您的用户名和电子邮件:
    1
    2
    git config --global user.name "Your Name"
    git config --global user.email "your_email@example.com"
  3. 创建新仓库:要创建一个新的Git仓库,您可以初始化一个现有的目录或创建一个新目录并初始化:
    1
    git init
  4. 添加文件:将文件添加到Git仓库的暂存区,准备提交:
    1
    git add <file>
  5. 提交更改:将暂存区的文件提交到仓库,并附加一条提交消息:
    1
    git commit -m "提交的信息"
  6. 查看状态:查看当前仓库的状态,包括未提交的更改和分支信息:
    1
    git status
  7. 查看日志:查看提交历史记录(包括提交的哈希值、作者、日期、提交信息):
    1
    git log
  8. 查看特定提交的内容(提交的详细信息,包括提交的哈希值、作者、日期、提交信息、文件内容以及更改的文件列表):
    1
    git show <commit-hash>
  9. 查看特定文件在特定提交中的内容(上同):
    1
    git show <commit-hash>:<path/to/file>
    这里 <path/to/file> 是你想要查看的文件的路径。

在Git版本控制系统中, commit-hash是一个提交(commit)的唯一标识符。每个提交都有一个与之关联的哈希值,这个哈希值是通过SHA-1哈希算法生成的,它保证了每个提交的唯一性。 当你需要引用一个特定的提交时,可以使用其哈希值。
可以使用git log来获取提交的哈希值。

二、分支管理

  1. 创建分支:创建一个新的分支:
    1
    git branch <branch_name>
  2. 切换分支:切换到已存在的分支:
    1
    git checkout <branch_name>
  3. 创建并切换分支:创建一个新分支并立即切换到该分支:
    1
    git checkout -b <branch_name>
  4. 合并分支:将一个分支的更改合并到当前分支:
    1
    git merge <branch_name>
  5. 删除分支:删除一个已合并的分支:
    1
    git branch -d <branch_name>

三、远程操作

  1. 添加远程仓库:将一个远程仓库添加到本地仓库:
    1
    git remote add <remote_name> <remote_url>
  2. 克隆远程仓库:从远程仓库克隆到本地:
    1
    git clone <remote_url>
  3. 拉取远程分支:从远程仓库拉取最新的更改:
    1
    git pull <remote_name> <branch_name>
  4. 推送本地分支:将本地分支的更改推送到远程仓库:
    1
    git push <remote_name> <branch_name>

四、高级功能

  1. 标签管理:为特定的提交创建标签:

    1
    git tag <tag_name>
  2. 撤销更改:撤销已提交的更改:

    1
    git revert <commit_hash>
  3. 变基操作:将一个分支的更改应用到另一个分支上:

    1
    git rebase <branch_name>
  4. 解决冲突:当合并分支时出现冲突,解决冲突并手动合并更改。

    后面会较详细介绍

五、工作流程

Git 的工作流程通常包括以下几个步骤:

  1. 修改文件:在本地工作目录中修改文件。
  2. 暂存更改:使用 git add 命令将更改添加到暂存区。
  3. 提交更改:使用 git commit 命令将暂存区的更改提交到仓库。
  4. 推送更改:如果有远程仓库,使用 git push 命令将本地提交推送到远程仓库。
    了解这些基本步骤有助于更好地理解 Git 的工作原理。

六、文件状态转换

文件在 Git 中的状态转换通常如下:

  1. 未跟踪(Untracked):文件尚未被 Git 追踪。
  2. 已暂存(Staged):文件已被添加到暂存区,等待被提交。
  3. 已提交(Committed):文件已被提交到仓库。
    了解这些状态转换有助于更好地管理文件的更改。

七、分支的详细解释

分支是 Git 中一个非常重要的概念。它允许您在不影响主代码库的情况下进行实验和开发。以下是对分支的一些详细解释:

  1. 主分支(Master/Main):通常是项目的默认分支,用于稳定和可发布的代码。
  2. 特性分支(Feature):用于开发新功能或实验性更改。
  3. 修复分支(Hotfix):用于快速修复生产环境中的问题。
    了解不同类型的分支以及如何使用它们有助于更好地组织代码库。

八、远程操作的图解

以下是本地仓库与远程仓库之间的基本交互图解:

1
2
3
4
5
本地仓库
|
| (git push)
V
远程仓库

了解本地仓库与远程仓库之间的交互有助于更好地进行团队协作和版本控制。

九、解决合并冲突的步骤

当合并分支时出现冲突时,通常需要手动解决。以下是一些解决合并冲突的步骤:

1. 查看冲突文件

当发生冲突时,Git 会停止合并过程,并提示您查看冲突文件。这些文件通常以 .orig.rej 结尾,表示原始文件和被拒绝的更改。
您可以使用 git status 命令来查看哪些文件存在冲突:

1
git status

2. 解决冲突

解决冲突通常需要手动编辑冲突文件。Git 会在冲突文件中添加特殊的标记,如 <<<<<<<, =======, 和 >>>>>>>。这些标记分隔了不同分支的更改。

  • <<<<<<<:表示来自第一个分支的更改。
  • =======:表示分隔线。
  • >>>>>>>:表示来自第二个分支的更改。
    您需要手动选择保留哪些更改,并删除其他更改。解决冲突后,您可以使用 git add 命令将文件添加到暂存区,并继续合并或变基操作。

3. 继续合并或变基

解决所有冲突后,您可以继续合并或变基操作。使用以下命令继续合并:

1
git merge --continue

或者,如果您在变基操作中遇到冲突,可以使用以下命令继续变基:

1
git rebase --continue

4. 跳过冲突

如果您不想解决某些冲突,可以跳过它们。使用以下命令跳过所有冲突并继续合并或变基操作:

1
git merge --abort

或者,如果您在变基操作中遇到冲突,可以使用以下命令跳过所有冲突并继续变基:

1
git rebase --abort

5. 解决冲突的其他方法

除了手动解决冲突,您还可以使用 git mergetool 命令来解决冲突。git mergetool 命令会启动一个图形化工具,可帮助您解决合并冲突。

十、高级功能的深入介绍

标签(Tag)

在 Git 中,标签(tag)是一种轻量级的提交引用,它指向提交对象(commit)。标签通常用于标记特定的提交,比如软件版本发布或者里程碑。标签是不可变的历史记录,一旦创建就不能被修改。

创建标签

创建标签有几种方法:

  1. 使用 git tag 命令
    1
    git tag <tag_name>
    这会在当前分支的最近提交上创建一个标签。
  2. 给旧提交创建标签
    1
    git tag <tag_name> <commit_hash>
    这允许您给之前的提交创建一个标签。
  3. 使用 -a 选项创建带有信息的标签
    1
    git tag -a <tag_name> -m "Release v1.0.0" <commit_hash>
    这会在指定提交的哈希值上创建一个标签,并附带一个信息(message)。
  4. 使用 -m 选项创建带有信息的标签
    1
    git tag -m "Release v1.0.0" <tag_name>
    这会在当前分支的最近提交上创建一个标签,并附带一个信息。

查看标签

要查看所有标签,可以使用 git tag 命令:

1
git tag

这会列出所有已创建的标签。

删除标签

要删除一个标签,可以使用 git tag -d <tag_name> 命令:

1
git tag -d v1.0.0

这将删除名为 v1.0.0 的标签。

推送标签到远程仓库

如果您的标签仅在本地创建,它们不会自动推送到远程仓库。要推送标签到远程仓库,可以使用以下命令:

1
git push origin <tag_name>

或者,如果您想要推送所有本地标签到远程仓库,可以使用:

1
git push origin --tags

拉取远程仓库的标签

如果您想要拉取远程仓库的标签到本地,可以使用以下命令:

1
git fetch origin --tags

这将拉取远程仓库的所有标签到本地,但不会自动添加到本地标签列表中。

打标签的注意事项

  • 不可变性:一旦创建,标签是不可变的,这意味着您不能修改或删除它们。
  • 历史记录:标签作为提交历史的引用,不会随着时间推移而改变。
  • 安全:标签可以被加密,以保护敏感信息。
  • 远程标签:标签可以存储在远程仓库中,也可以只存储在本地。

变基(Rebase)

在Git中,变基(rebase)是一种将一系列提交移动到新基础的操作。它通常用于将一个分支的更改合并到另一个分支上,或者在进行交互式变基时重新排列、编辑或压缩提交。变基可以改变历史记录,因此在公共分支上使用时需要格外小心。

基本变基操作

假设你有两个分支:masterfeature。你想要将 feature 分支上的更改合并到 master 分支上,但不想创建合并提交。你可以使用变基来实现这一点:

  1. 首先,切换到 feature 分支:
1
git checkout feature
  1. 然后,将 feature 分支变基到 master 分支:
1
git rebase master

这会将 feature 分支上的所有提交移动到 master 分支的最新提交之后。

交互式变基

交互式变基允许你在变基过程中修改提交。这可以用来合并多个提交、修改提交信息、删除提交或重新排序提交。

要进行交互式变基,使用 -i--interactive 选项:

1
git rebase -i master

这将打开一个文本编辑器,列出 feature 分支上所有从 master 分支分叉之后的提交。你可以在这里选择要进行的操作,比如 pick(保留提交)、reword(修改提交信息)、edit(修改提交内容)、squash(合并提交)等。

注意事项

  • 不要在公共分支上变基:如果你已经将变基后的分支推送到远程仓库,那么在公共分支上使用变基可能会导致其他协作者的仓库出现冲突。在进行变基之前,最好先与团队成员沟通。
  • 使用变基前备份:在执行变基操作之前,最好备份你的工作,以防万一。
  • 解决冲突:在变基过程中,你可能会遇到冲突。你需要手动解决这些冲突,然后使用 git add 标记冲突已解决,最后使用 git rebase --continue 继续变基过程。

diff 命令

diff 命令用于显示工作目录、暂存区和上一个提交之间的差异。它可以帮助您了解哪些文件被添加、修改或删除,以及这些更改的具体内容。

1. 查看工作目录与暂存区之间的差异

要查看工作目录与暂存区之间的差异,可以使用以下命令:

1
git diff

这会显示所有已跟踪文件的工作目录与暂存区之间的差异。

2. 查看工作目录与上次提交之间的差异

要查看工作目录与上次提交之间的差异,可以使用以下命令:

1
git diff HEAD

这会显示工作目录与上次提交之间的差异。

3. 查看暂存区与上次提交之间的差异

要查看暂存区与上次提交之间的差异,可以使用以下命令:

1
git diff --cached

这会显示暂存区与上次提交之间的差异。

4. 查看两个提交之间的差异

要查看两个提交之间的差异,可以使用以下命令:

1
git diff <commit_hash_1> <commit_hash_2>

这会显示两个提交之间的差异。

5. 查看多个提交之间的差异

要查看多个提交之间的差异,可以使用以下命令:

1
git diff <commit_hash_1>..<commit_hash_2>

这会显示两个提交之间的差异。

log 命令

log 命令用于显示提交历史记录。它可以帮助您查看提交的时间、作者、提交信息等信息。

1. 查看提交历史

要查看提交历史,可以使用以下命令:

1
git log

这会显示提交历史记录,包括提交的时间、作者、提交信息等信息。

2. 查看特定提交的历史

要查看特定提交的历史,可以使用以下命令:

1
git log <commit_hash>

这会显示指定提交的历史记录。

3. 查看提交日志的格式化输出

要查看提交日志的格式化输出,可以使用以下命令:

1
git log --oneline

这会显示提交日志的简洁格式化输出。

4. 查看提交日志的详细信息

要查看提交日志的详细信息,可以使用以下命令:

1
git log --graph --oneline

这会显示提交日志的图形化格式化输出。

5. 查看特定文件的历史更改

要查看特定文件的历史更改,可以使用以下命令:

1
git log -- <file_path>

这会显示指定文件的历史更改。

撤销更改

在 Git 中,撤销更改通常指的是回退到之前的某个提交状态。撤销更改可以通过几种不同的方式实现,具体取决于您想要撤销的是已提交的更改还是未提交的更改。以下是一些常见的撤销更改的方法:

使用 git reset 撤销更改

git reset 命令用于将当前分支的HEAD指针移动到指定的提交,同时可以选择性地重置暂存区和工作目录。它有三种主要模式:--soft, --mixed(默认),和 --hard

  1. 撤销提交但保留更改 (--soft):

    1
    git reset --soft <commit-hash>

    这将撤销提交,但保留更改在暂存区。

  2. 撤销提交并重置暂存区 (--mixed):

    1
    git reset <commit-hash>

    这将撤销提交并重置暂存区,但保留更改在工作目录。

  3. 撤销提交并丢弃更改 (--hard):

    1
    git reset --hard <commit-hash>

    这将撤销提交并丢弃所有更改,包括工作目录中的更改。

假设你有以下提交历史:

1
A -- B -- C -- D (HEAD)

如果你想要撤销提交 C,你可以使用:

1
git reset --hard B

这将把HEAD指针移动到提交 B,丢弃 CD 的更改。

使用 git revert 撤销更改

git revert 命令用于创建一个新的提交,该提交撤销了指定提交所做的更改。它不会改变历史记录,而是通过添加一个新的提交来记录撤销操作。

撤销更改

1
git revert <commit-hash>

假设你有以下提交历史:

1
A -- B -- C -- D (HEAD)

如果你想要撤销提交 C,你可以使用:

1
git revert C

这将创建一个新的提交 E,它撤销了提交 C 的更改。提交 E 将成为新的HEAD。

撤销最近提交

1
git revert HEAD~<number_of_commits>

Git会创建一个新的提交,该提交将撤销最近一次提交(即HEAD指向的提交)所做的更改。

这里,HEAD 是一个特殊的指针,它指向当前检出的分支的最新提交。因此,git revert HEAD 实际上是撤销了当前分支上最新的提交所做的更改。
这将创建一个新的提交,撤销指定数量的上一个提交,用于撤销一个或多个提交所做的更改。

假设你想要撤销最近的两个提交,你可以使用以下命令:

1
git revert HEAD~2

注意事项

  • 使用 git reset 时要小心,因为它会丢弃更改。
  • 使用 git revert 时,确保你理解了将要撤销的更改,因为这将创建一个新的提交。这可能会影响提交历史和分支结构。
  • 使用 git revert 而不是 git reset 的好处是,它不会改变历史记录,而是通过创建一个新的提交来记录撤销操作,这样可以保持历史的完整性,并且不会影响其他协作者的工作。

通过理解这两个命令的不同,你可以根据需要选择最合适的命令来撤销更改。

十一、安全性考虑

使用 Git 时,安全性是一个重要的考虑因素。以下是一些安全性建议:

  1. 保护密钥:使用 SSH 密钥或 HTTPS 令牌进行身份验证,并确保它们得到妥善保护。
  2. 访问控制:设置适当的权限和访问控制,以限制对代码库的访问。
  3. 定期更新:定期更新 Git 和相关工具,以确保安全性漏洞得到修复。
    了解如何保护代码库和密钥有助于确保代码的安全性。

十二、技巧

以下是一些使用 Git 的技巧:

  1. 定期推送到远程仓库:定期将更改推送到远程仓库,以保持备份和同步。
  2. 保持分支的清洁:定期清理分支,删除不再需要的分支。
  3. 使用描述性的提交消息:编写清晰、描述性的提交消息,以便于理解代码的更改。
    了解这些最佳实践和技巧有助于更好地使用 Git。

十三、资源和进一步学习

以下是一些学习 Git 的资源和进一步学习的建议:

  1. 官方文档:Git 的官方文档是学习 Git 的最佳起点。您可以在 git-scm.com 上找到官方文档。
  2. 在线教程:许多在线平台提供了 Git 的教程和课程,例如 GitHub、GitLab 等。
  3. 书籍:有许多关于 Git 的优秀书籍,例如《Pro Git》和《Git Pocket Guide》。
    了解这些资源和进一步学习的建议有助于深入理解 Git。
    通过添加这些内容,您的博客文章将更加全面和有用,能够帮助读者更好地理解和使用 Git。

本站由 Natuie 使用 Stellar 1.26.8 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站总访问量次 | 本站总访客数人次
载入天数...载入时分秒...