0


【Git】Git 完全指南:从入门到精通

LuckiBit
在这里插入图片描述

Git 完全指南:从入门到精通

Git 是现代软件开发中最重要的版本控制工具之一,它帮助开发者高效地管理项目,支持分布式协作和版本控制。无论是个人项目还是团队开发,Git 都能提供强大的功能来跟踪、管理代码变更,并保障项目的稳定性与可持续发展。本篇文章从基础命令讲起,逐步深入,帮助你全面了解并掌握 Git,最终达到精通。

目录

1. Git 概述

1.1 什么是 Git

Git 是一个分布式版本控制系统,用于跟踪文件的变化,尤其是程序代码的变化。它由 Linus Torvalds(Linux 操作系统的创建者)于 2005 年开发。Git 允许开发者在本地创建代码仓库,进行文件修改、提交等操作,直到准备好与远程仓库同步。Git 提供强大的分支管理功能,可以在不干扰主分支的情况下开发新功能或修复 bug。

1.2 Git 与其他版本控制系统的区别

  • 集中式版本控制系统(如 SVN):所有的代码版本保存在一个中央服务器中。每次操作都需要连接到服务器。
  • 分布式版本控制系统(如 Git):每个开发者的工作站都有完整的代码历史记录,可以脱离服务器工作,直到需要同步时才连接。

1.3 Git 的主要特点

  • 速度快:Git 的本地操作速度非常快,因为大多数操作是在本地完成的。
  • 分布式架构:每个开发者的机器上都有完整的代码库副本,不依赖于中央服务器。
  • 支持分支和合并:Git 提供强大的分支管理和合并功能,便于团队协作。
  • 数据完整性:Git 使用 SHA-1 哈希值确保版本数据的完整性,防止数据丢失。

2. Git 安装与配置

2.1 Git 安装

Git 支持多种操作系统,包括 Windows、macOS 和 Linux。以下是不同操作系统的安装方法:

Windows
  1. 前往 Git 官方网站 下载 Windows 版 Git。
  2. 运行安装程序,按照向导完成安装,选择默认选项即可。
  3. 安装完成后,在命令行输入 git --version,如果显示 Git 的版本号,表示安装成功。
macOS
  1. 可以使用 Homebrew 安装 Git,打开终端并输入:brew installgit
  2. 安装完成后,在命令行输入 git --version,如果显示 Git 的版本号,表示安装成功。
Linux
  1. 在 Debian/Ubuntu 系统上,可以使用以下命令安装:sudoapt updatesudoaptinstallgit
  2. 在 Red Hat/Fedora 系统上:sudo yum installgit

2.2 Git 配置

Git 安装完成后,第一次使用时需要进行一些基本配置,主要包括设置用户名和邮箱。

命令

  1. git config --global user.name "<username>"git config --global user.email "<email>"

示例命令

  1. git config --global user.name "John Doe"git config --global user.email "johndoe@example.com"

效果

  • 这些配置将用于你所有的 Git 提交,确保每次提交时正确记录提交者信息。
  • 配置成功后,使用 git config --list 可以查看所有配置信息。

3. Git 基础命令

3.1 克隆 Git 仓库

命令

  1. git clone <repository_url>

示例命令

  1. git clone https://github.com/example/repo.git

效果

  • 克隆远程仓库到本地。此命令会创建一个与远程仓库同名的文件夹,并将所有文件和历史记录下载到本地。
  • 终端输出Cloning into 'repo'...remote: Counting objects: 50, done.remote: Compressing objects: 100% (25/25), done.remote: Total 50(delta 15), reused 20(delta 5), pack-reused 0Unpacking objects: 100% (50/50), done.

3.2 查看 Git 仓库状态

命令

  1. git status

示例命令

  1. git status

效果

  • 显示当前工作目录的状态,列出哪些文件有变更,哪些文件已经暂存,哪些文件没有被跟踪。
  • 终端输出On branch masterYour branch is up to date with 'origin/master'.Changes not staged for commit: modified: index.htmlno changes added to commit (use "git add" and/or "git commit -a")

3.3 查看提交历史

命令

  1. git log

示例命令

  1. git log

效果

  • 查看当前 Git 仓库的提交历史。Git 会显示每次提交的哈希值、作者信息、提交日期和提交信息。
  • 终端输出commit 1234567890abcdef1234567890abcdef12345678Author: John Doe <johndoe@example.com>Date: Tue Oct 2818:32:01 2024 +0800 Fixed the bug in index.htmlcommit 0987654321abcdef0987654321abcdef09876543Author: Jane Smith <janesmith@example.com>Date: Mon Oct 2712:15:45 2024 +0800 Added new feature to main.js

3.4 创建、切换和删除分支

创建分支

命令

  1. git branch <branch_name>

示例命令

  1. git branch feature-xyz

效果

  • 创建一个新的分支 feature-xyz,但并不切换到该分支。
切换分支

命令

  1. git checkout <branch_name>

示例命令

  1. git checkout feature-xyz

效果

  • 切换到指定的分支 feature-xyz
删除分支

命令

  1. git branch -d<branch_name>

示例命令

  1. git branch -d feature-xyz

效果

  • 删除分支 feature-xyz,如果分支已经合并到当前分支,则可以成功删除。如果没有合并,Git 会提示你需要使用 -D 强制删除。

3.5 合并分支

命令

  1. git merge <branch_name>

示例命令

  1. git merge feature-xyz

效果

  • feature-xyz 分支的更改合并到当前分支。如果没有冲突,Git 会自动合并并创建一个新的提交。
  • 终端输出Updating abcdef1..1234567Fast-forward file1 |2 +- 1file changed, 1 insertion(+), 1 deletion(-)

如果合并过程中出现冲突,Git 会标记出冲突文件,需要手动解决冲突后再提交。

4. Git 提交与变更管理

4.1 提交文件变更

命令

  1. git commit -m"<commit_message>"

示例命令

  1. git commit -m"Fix bug in header component"

效果

  • 将已暂存的更改提交到本地 Git 仓库,并附带一条提交信息。
  • 终端输出[master 1234567] Fix bug in header component 1file changed, 2 insertions(+), 1 deletion(-)

4.2 查看差异

命令

  1. gitdiff

示例命令

  1. gitdiff

效果

  • 显示工作目录与暂存区之间的差异,或者暂存区与最后一次提交之间的差异。它是用来查看文件改动的详细内容。
  • 终端输出diff --git a/index.html b/index.htmlindex abcdef1..1234567 100644--- a/index.html+++ b/index.html@@ -1,3 +1,3 @@ <header>- <h1>Welcome to My Website</h1>+ <h1>Welcome to Our Website</h1> </header>

4.3 使用暂存区

Git 使用暂存区来暂存更改,等待提交。你可以使用

  1. git add

将修改的文件添加到暂存区,然后使用

  1. git commit

提交更改。

暂存所有更改

命令

  1. gitadd.

示例命令

  1. gitadd.

效果

  • 暂存当前目录下的所有更改(包括新增、修改和删除的文件)。然后,使用 git commit 提交这些更改。
暂存单个文件

命令

  1. gitadd<file_name>

示例命令

  1. gitadd index.html

效果

  • index.html 文件的更改添加到暂存区,准备提交。

5. Git 分支管理

5.1 分支的概念

分支是 Git 中一个非常强大的功能,它允许你在不影响主分支(通常是

  1. master

  1. main

)的情况下进行开发。每个分支都是代码的一个独立版本,开发者可以在不同分支上并行开发,最后再将它们合并。

  • 主分支:通常是主开发线的分支,生产环境代码通常部署在主分支上。
  • 功能分支:通常用于开发新功能。每个功能分支在完成开发后合并回主分支。
  • 发布分支:用于准备代码发布,确保代码在生产环境中运行良好。

5.2 创建、切换和删除分支

创建分支

命令

  1. git branch <branch_name>

示例命令

  1. git branch feature-login

效果

  • 创建一个名为 feature-login 的新分支,但不切换到该分支。
切换分支

命令

  1. git checkout <branch_name>

示例命令

  1. git checkout feature-login

效果

  • 切换到 feature-login 分支,开始在该分支上进行开发。
删除分支

命令

  1. git branch -d<branch_name>

示例命令

  1. git branch -d feature-login

效果

  • 删除 feature-login 分支。如果该分支已经合并到当前分支,删除将成功。如果尚未合并,Git 会发出警告。

5.3 合并分支与解决冲突

当开发者在不同分支上进行开发并且最终需要将这些更改合并时,Git 提供了合并操作。合并时,如果两个分支修改了相同的部分,Git 会提示冲突,并要求开发者手动解决。

合并分支

命令

  1. git merge <branch_name>

示例命令

  1. git merge feature-login

效果

  • feature-login 分支的更改合并到当前分支。如果没有冲突,Git 会自动完成合并,并创建一个新的提交。
解决冲突

如果合并时发生冲突,Git 会标记出冲突文件,开发者需要手动编辑冲突部分,解决后再执行提交。

  1. 查看冲突文件:git status
  2. 编辑冲突文件,删除冲突标记,修改内容。
  3. 暂存解决冲突的文件:gitadd<conflicted_file>
  4. 完成合并并提交:git commit

6. Git 工作流

6.1 基本工作流

Git 的基本工作流包括以下步骤:

  1. 从远程仓库克隆项目。
  2. 在本地创建新的分支进行开发。
  3. 完成开发后,提交更改并推送到远程仓库。
  4. 合并到主分支并推送到远程仓库。

6.2 Git Flow 工作流

Git Flow 是一种非常流行的 Git 工作流,适用于持续集成和团队合作的项目。Git Flow 使用几个固定的分支来管理开发周期:

  • master:用于发布的分支,生产环境代码总是保持稳定。
  • develop:用于开发的主分支,所有的开发和集成工作都发生在这里。
  • feature:每个新功能都应该在独立的分支上开发。
  • release:当开发周期结束时,创建一个发布分支进行最终调试。
  • hotfix:用于修复生产环境的紧急问题。

6.3 Fork 与 Pull Request 工作流

在开源项目中,通常使用 Fork 和 Pull Request(PR)工作流。开发者可以 fork 一个远程仓库,修改自己的分支,最后通过 Pull Request 将修改提交给原仓库的所有者进行合并。

  1. Fork:在 GitHub 上 fork 仓库,创建该仓库的副本。
  2. Clone:将 fork 的仓库克隆到本地。
  3. 修改与提交:在本地修改代码并提交。
  4. Pull Request:在 GitHub 上发起 Pull Request,将修改提交给原项目。

7. Git 高级命令与技巧

7.1 Rebase 与 Merge

  1. git merge

  1. git rebase

都用于合并分支,但它们的工作方式不同。

  • Merge:合并分支时,会产生一个合并提交,保留合并历史。
  • Rebase:将一个分支的修改应用到另一个分支的最顶端,从而产生一个线性的提交历史。

命令

  1. git rebase <branch_name>

示例命令

  1. git rebase master

效果

  • 将当前分支的更改应用到 master 分支的顶部,从而产生一个线性的提交历史。

7.2 使用 Tag

Git 使用标签(Tag)来标记特定的提交点,通常用于标记发布版本。

命令

  1. git tag <tag_name>

示例命令

  1. git tag v1.0

效果

  • 为当前提交创建一个名为 v1.0 的标签。

7.3 Git 忽略文件

在 Git 中,

  1. .gitignore

文件用于指定 Git 不需要跟踪的文件或目录。它通常用于忽略临时文件、编译产物、操作系统生成的文件等不需要版本控制的内容。合理使用

  1. .gitignore

能有效保持 Git 仓库的整洁,避免不必要的文件进入版本控制系统。

7.3.1 创建
  1. .gitignore

文件

命令

  1. echo"<pattern>">> .gitignore

示例命令

  1. echo"node_modules/">> .gitignore

效果

  • 这个命令将 node_modules/ 目录添加到 .gitignore 文件中,表示 Git 将忽略所有 node_modules 目录下的文件。
  • 如果 .gitignore 文件不存在,它会自动创建并将指定的内容追加到文件末尾。
  • 运行命令后,执行 cat .gitignore 可以看到文件内容:$ cat .gitignorenode_modules/

注意事项

  • .gitignore 是一个文本文件,你可以手动编辑该文件来添加其他需要忽略的文件或目录模式。
  • 使用 >> 操作符会将内容追加到 .gitignore 文件,如果该文件已经存在,内容将不会被覆盖。
7.3.2 编辑
  1. .gitignore

文件

在项目开发中,可能会有多个文件需要被忽略,或者更改忽略规则。你可以手动编辑

  1. .gitignore

文件,添加新的忽略规则。

命令

  1. nano .gitignore

示例命令

  1. nano .gitignore

效果

  • 这会打开 .gitignore 文件,允许你进行手动编辑。你可以在文件中添加或删除需要忽略的文件或目录模式。
  • 例如,添加以下内容以忽略某些常见文件和文件夹:*.log*.tmpnode_modules/dist/ 这样,所有 .log.tmp 文件以及 node_modules/dist/ 目录下的文件都会被 Git 忽略。

提示

  • 使用 nano 命令时,编辑完文件后需要按 Ctrl + O 保存文件,按 Ctrl + X 退出编辑器。
7.3.3 忽略已跟踪的文件

如果某个文件已经被 Git 跟踪,但之后你希望忽略它,可以通过修改

  1. .gitignore

文件来实现。需要先将该文件从 Git 的索引中移除,然后才能正确忽略。

命令

  1. gitrm--cached<file_name>

示例命令

  1. gitrm--cached node_modules/

效果

  • 这个命令将 node_modules/ 目录从 Git 的索引中移除,但不会删除本地文件。
  • 在移除索引后,node_modules/ 目录将被 .gitignore 忽略,不再被 Git 跟踪。
  • 执行 git status 会看到该文件或目录从暂存区移除的提示:$ git statusChanges to be committed: (use "git restore --staged <file>..." to unstage) deleted: node_modules/

注意事项

  • 使用 --cached 参数仅会从 Git 的索引中删除文件,文件本身会保留在本地工作区。
  • 在移除文件后,记得提交 .gitignore 文件和 git rm 操作:git commit -m"Remove node_modules from version control"
7.3.4 适用的忽略规则

  1. .gitignore

文件中,可以使用不同的模式来指定忽略哪些文件或目录。以下是常见的忽略规则:

  • **通配符 ***:匹配零个或多个字符。例如,*.log 会忽略所有 .log 文件。
  • **目录模式 /***:匹配目录中的所有文件。例如,build/* 会忽略 build/ 目录下的所有文件。
  • **否定符 !**:在忽略规则中,使用 ! 来指定不忽略某个文件或目录。例如,!important.log 会保留 important.log 文件。
  • **注释 #**:注释行以 # 开头,Git 会忽略注释行。例如,# Ignore logs

命令

  1. echo"*.log">> .gitignore
  2. echo"!important.log">> .gitignore

效果

  • *.log 忽略所有 .log 文件。
  • !important.log 保留 important.log 文件,即使它符合 .log 模式。

注意事项

  • .gitignore 中添加规则时,一定要注意规则的顺序,因为后面的规则会覆盖前面的规则。例如,如果先添加 *.log 忽略所有 .log 文件,再添加 !important.log 来保留 important.log
7.3.5 常见的
  1. .gitignore

配置

以下是一些常见的

  1. .gitignore

配置,适用于不同的开发环境和工具。

1. Node.js 项目
  1. .gitignore
  1. # 忽略 node_modules 目录
  2. node_modules/
  3. # 忽略编译的日志文件
  4. npm-debug.log*
  5. # 忽略临时文件
  6. *.tmp
  7. *.swp
2. Python 项目
  1. .gitignore
  1. # 忽略虚拟环境目录
  2. venv/
  3. # 忽略 Python 编译的文件
  4. *.pyc
  5. *.pyo
3. Java 项目
  1. .gitignore
  1. # 忽略 Maven 构建输出目录
  2. target/
  3. # 忽略 IntelliJ IDEA 配置文件
  4. .idea/
  5. # 忽略 Eclipse 配置文件
  6. .project
  7. .classpath
7.3.6 提交
  1. .gitignore

文件

一旦你修改了

  1. .gitignore

文件并确保它包含了所有需要忽略的文件和目录,记得将它提交到 Git 仓库,以便其他开发者也能够使用相同的忽略规则。

命令

  1. gitadd .gitignore
  2. git commit -m"Add .gitignore to ignore unnecessary files"git push origin <branch_name>

示例命令

  1. gitadd .gitignore
  2. git commit -m"Add .gitignore to ignore node_modules"git push origin main

效果

  • .gitignore 文件添加到暂存区,提交到版本控制中,并推送到远程仓库。
  • 其他开发者拉取代码时,.gitignore 文件将自动应用到他们的本地仓库,确保不再跟踪忽略的文件。

7.4 查看提交历史

命令

  1. git log

示例命令

  1. git log

效果

  • 显示当前分支的提交历史,包括每个提交的哈希值、提交作者、提交时间和提交信息。输出格式如下:commit 1234567890abcdef1234567890abcdef12345678 (HEAD -> master)Author: John Doe <johndoe@example.com>Date: Thu Oct 2812:15:42 2024 +0000 Fix bug in header componentcommit abcdef1234567890abcdef1234567890abcdef12Author: Jane Smith <janesmith@example.com>Date: Wed Oct 2715:22:08 2024 +0000 Add new feature to handle user login
  • 额外选项:- git log --oneline:简洁模式,只显示提交的哈希值和提交信息。- git log --graph:以图形化方式显示提交历史。

7.5 撤销修改

Git 提供了多种方式撤销更改,视不同的场景而定。

7.5.1 撤销未暂存的更改

命令

  1. git checkout -- <file_name>

示例命令

  1. git checkout -- index.html

效果

  • 撤销文件 index.html 中的未暂存更改,恢复到上次提交时的状态。
7.5.2 撤销暂存的更改

命令

  1. git reset <file_name>

示例命令

  1. git reset index.html

效果

  • 将已暂存的 index.html 文件从暂存区移除,但不影响文件内容。如果你已经执行了 git add,此命令将取消暂存,但不会丢失文件中的更改。
7.5.3 撤销整个提交

命令

  1. git reset --hard<commit_hash>

示例命令

  1. git reset --hard abcdef1234567890abcdef1234567890abcdef12

效果

  • 重置当前分支到指定的提交 abcdef1234567890abcdef1234567890abcdef12,并且丢弃所有当前工作目录中的更改。请谨慎使用,因为此命令会删除所有未提交的更改。

8. Git 与远程仓库

8.1 查看远程仓库

命令

  1. git remote -v

示例命令

  1. git remote -v

效果

  • 显示当前项目的远程仓库信息,包括远程仓库的名称(通常为 origin)和 URL 地址。输出示例如下:origin https://github.com/example/repo.git (fetch)origin https://github.com/example/repo.git (push)

8.2 拉取远程仓库的更新

命令

  1. git pull

示例命令

  1. git pull origin master

效果

  • 从远程仓库的 master 分支拉取最新的更改并自动合并到本地当前分支。如果没有冲突,Git 会自动合并。
  • 终端输出remote: Enumerating objects: 20, done.remote: Counting objects: 100% (20/20), done.remote: Compressing objects: 100% (14/14), done.From https://github.com/example/repo * branch master -> FETCH_HEAD Updating abcdef1..1234567 Fast-forward file1 |2 +- 1file changed, 1 insertion(+), 1 deletion(-)

8.3 推送本地更改到远程仓库

命令

  1. git push <remote_name><branch_name>

示例命令

  1. git push origin master

效果

  • 将本地 master 分支的提交推送到远程仓库。确保本地分支与远程分支一致后,执行推送操作。
  • 终端输出Counting objects: 3, done.Delta compression using up to 4 threads.Compressing objects: 100% (3/3), done.Writing objects: 100% (3/3), 329 bytes |329.00 KiB/s, done.To https://github.com/example/repo.git 1234567..89abcdef master -> master

8.4 克隆远程仓库

命令

  1. git clone <repository_url>

示例命令

  1. git clone https://github.com/example/repo.git

效果

  • 克隆远程仓库到本地,创建一个新的 Git 仓库,并自动设置远程 origin 指向该仓库。
  • 终端输出Cloning into 'repo'...remote: Enumerating objects: 123, done.remote: Counting objects: 100% (123/123), done.remote: Compressing objects: 100% (90/90), done.remote: Total 123(delta 10), reused 90(delta 6), pack-reused 0Receiving objects: 100% (123/123), 3.64 MiB |2.50 MiB/s, done.Resolving deltas: 100% (10/10), done.

9. Git 高级特性

9.1 子模块 (Submodule)

Git 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。它特别适合将第三方库或依赖项目引入到你的项目中。

添加子模块

命令

  1. git submodule add<repository_url><path>

示例命令

  1. git submodule add https://github.com/example/other-repo.git submodules/other-repo

效果

  • 将一个外部仓库添加为子模块,并将其内容放置在指定路径(如 submodules/other-repo)下。
更新子模块

命令

  1. git submodule update --remote

示例命令

  1. git submodule update --remote

效果

  • 更新所有子模块到最新的远程版本。

9.2 使用 Git 钩子 (Hooks)

Git 钩子是 Git 中的一个机制,允许在执行某些操作前或后运行自定义脚本。常见的钩子包括

  1. pre-commit

  1. post-commit

设置钩子

命令

  1. cd .git/hooks

示例命令

  1. cd .git/hooks

效果

  • 进入 .git/hooks 目录,所有的钩子脚本都存放在该目录中。
示例钩子:
  1. pre-commit

命令

  1. echo"#!/bin/sh"> .git/hooks/pre-commit
  2. echo"echo 'Running pre-commit hook...'">> .git/hooks/pre-commit
  3. chmod +x .git/hooks/pre-commit

效果

  • 创建一个 pre-commit 钩子,每次提交之前,都会运行这个脚本。
  • 脚本内容会输出 "Running pre-commit hook...",并且该钩子需要执行权限。

9.3 Git 配置与别名

Git 允许你为常用命令设置别名,帮助提高工作效率。

设置别名

命令

  1. git config --global alias.<alias_name><git_command>

示例命令

  1. git config --global alias.co checkout

效果

  • git checkout 命令设置别名 git co,以后可以使用 git co 来代替 git checkout
查看配置

命令

  1. git config --list

示例命令

  1. git config --list

效果

  • 显示所有 Git 配置项,例如用户信息、别名设置等。

10. Git 性能优化与高级技巧

10.1 使用 Git LFS (Large File Storage)

Git LFS 用于管理大型文件(如二进制文件、视频文件等),它将这些大文件存储在 Git 外部的专用服务中,从而避免仓库变得过于庞大。

安装 Git LFS

命令

  1. git lfs install

示例命令

  1. git lfs install

效果

  • 安装 Git LFS(Large File Storage),使其可以用于管理大型文件。
  • 终端输出Git LFS initialized.
跟踪大型文件类型

命令

  1. git lfs track "*.psd"

示例命令

  1. git lfs track "*.psd"

效果

  • 开始跟踪所有 .psd 文件类型的文件,将它们存储在 Git LFS 中。
  • 输出示例:Tracking "*.psd" to Git LFS.
提交 LFS 文件

命令

  1. gitadd<file_name>git commit -m"Add large file"

示例命令

  1. gitadd image.psd
  2. git commit -m"Add large PSD file"

效果

  • 将大文件(如 image.psd)添加到 Git LFS 管理的文件中,然后提交。

10.2 Git 分支管理高级技巧

删除本地分支

命令

  1. git branch -d<branch_name>

示例命令

  1. git branch -d feature-xyz

效果

  • 删除本地分支 feature-xyz,如果该分支未完全合并到当前分支,Git 会阻止删除。使用 -D 强制删除:git branch -D feature-xyz
删除远程分支

命令

  1. git push <remote_name>--delete<branch_name>

示例命令

  1. git push origin --delete feature-xyz

效果

  • 删除远程仓库中的 feature-xyz 分支。

10.3 Git 合并与冲突解决

合并分支

命令

  1. git merge <branch_name>

示例命令

  1. git merge feature-xyz

效果

  • feature-xyz 分支的修改合并到当前分支。如果没有冲突,Git 会自动合并修改并创建一次新的提交。
解决冲突

命令

  1. git status

示例命令

  1. git status

效果

  • 查看当前分支的状态,Git 会提示哪些文件存在冲突。通常会显示为 both modified,需要手动编辑冲突文件。

解决冲突步骤

  1. 打开冲突文件,手动解决冲突。Git 会在冲突部分标记出不同的修改,类似如下:<<<<<<< HEAD// Your changes here=======// Changes from the other branch>>>>>>> feature-xyz
  2. 在解决冲突后,标记为已解决:gitadd<file_name>
  3. 完成合并并提交:git commit

11. Git 工作流程

11.1 基本工作流程

命令

  1. git clone <repository_url>git checkout -b<new_branch>gitadd<file_name>git commit -m"Your commit message"git push origin <new_branch>

示例命令

  1. git clone https://github.com/example/repo.git
  2. git checkout -b feature-xyz
  3. gitadd index.html
  4. git commit -m"Add new feature to index"git push origin feature-xyz

效果

  • 这是一个基本的 Git 工作流程,包括从远程仓库克隆、创建新分支、修改文件、提交更改、推送到远程仓库等步骤。

11.2 Git Flow 工作流程

Git Flow 是一种常见的 Git 工作流程,它定义了多个分支类型和对应的管理策略,旨在简化团队协作。

安装 Git Flow

命令

  1. git flow init

示例命令

  1. git flow init

效果

  • 启动 Git Flow 工作流程初始化,设置默认的分支策略。
  • 会提示输入分支名称等设置,通常选择默认设置即可。
创建新特性分支

命令

  1. git flow feature start <feature_name>

示例命令

  1. git flow feature start feature-xyz

效果

  • 使用 Git Flow 创建一个新的特性分支 feature-xyz,用于开发新功能。
完成特性分支

命令

  1. git flow feature finish <feature_name>

示例命令

  1. git flow feature finish feature-xyz

效果

  • 完成 feature-xyz 分支的开发,并将其合并回 develop 分支。
发布分支

命令

  1. git flow release start <release_name>

示例命令

  1. git flow release start 1.0.0

效果

  • 创建一个新的发布分支 1.0.0,用于准备发布版本。

12. Git 进阶技巧

12.1 使用 Stash 临时保存更改

Git 提供了

  1. stash

命令,用于将当前的更改暂时保存,之后可以恢复,以便切换到其他任务。

保存当前更改

命令

  1. git stash

示例命令

  1. git stash

效果

  • 保存当前工作区的修改,并将工作区恢复为最近一次提交时的状态。
查看 Stash 列表

命令

  1. git stash list

示例命令

  1. git stash list

效果

  • 显示所有的暂存更改(stash)列表。输出示例:stash@{0}: WIP on master: 1234567 Add feature Xstash@{1}: WIP on feature-xyz: abcdef0 Fix bug Y
恢复 Stash

命令

  1. git stash apply <stash_index>

示例命令

  1. git stash apply stash@{0}

效果

  • 恢复指定的暂存更改,将其应用到当前分支。
删除 Stash

命令

  1. git stash drop <stash_index>

示例命令

  1. git stash drop stash@{0}

效果

  • 删除指定的暂存更改。

12.2 使用 rebase 重新应用提交

  1. rebase

用于将一组提交应用到另一个分支上,常用于整理提交历史。

执行 Rebase

命令

  1. git rebase <base_branch>

示例命令

  1. git rebase master

效果

  • 将当前分支的提交重新应用到 master 分支的最新提交上。

12.3 使用 Bisect 查找提交中的 bug

Git Bisect 是一个二分查找工具,用于定位某个 bug 引入的提交。

启动 Bisect

命令

  1. git bisect start

示例命令

  1. git bisect start

效果

  • 启动 bisect 过程,Git 会要求你指定已知的“坏”提交和“好”提交。
标记提交为好或坏

命令

  1. git bisect good <commit_hash>git bisect bad <commit_hash>

示例命令

  1. git bisect good abcdef1234567890
  2. git bisect bad 1234567890abcdef

效果

  • 标记提交为好(不包含 bug)或坏(包含 bug)。Git 会通过二分查找来缩小范围,直到定位到引入 bug 的提交。

13. 寄语

Git 是一种强大的版本控制工具,掌握了其基本命令和高级特性后,可以大大提高开发效率并方便团队协作。通过本篇文章,你已经学会了 Git 的核心命令及其使用方法,希望你能够灵活运用 Git 在实际项目中进行版本管理。

14. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对 Git 有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!点我关注❤️
标签: git GitHub 分布式

本文转载自: https://blog.csdn.net/EleganceJiaBao/article/details/144108275
版权归原作者 LuckiBit 所有, 如有侵权,请联系我们删除。

“【Git】Git 完全指南:从入门到精通”的评论:

还没有评论