【Git】本地版本控制

Git 是一个分布式版本控制系统,用于跟踪文件的更改,通常用于源代码管理。它的设计目的是为了协同工作和版本管理,让多个开发人员能够高效地合作开发和维护代码。

Git环境配置

在官网可以找到对应下载:Git - Downloads (git-scm.com)。安装选项均默认即可

也可以在Windows命令行输入:

sh 复制代码
winget install --id Git.Git -e --source winget 

对于Ubuntu来说,这个PPA提供了最新的稳定的上游Git版本:

sh 复制代码
add-apt-repository ppa:git-core/ppa  #可以通过添加 Git Core PPA 来安装最新的稳定版 Git
apt update  #添加 PPA 后,更新你的包列表:
apt install git  #安装最新版本的 Git

打开 Git Bash(可以在开始菜单中找到)

设置用户名和邮箱:

sh 复制代码
git config --global user.name "你的名字"
git config --global user.email "你的邮箱地址(可随意填写)"

验证配置:

sh 复制代码
git config --list

创建新的本地仓库

在 Git Bash 中导航到你想创建新仓库的目录。例如:

sh 复制代码
cd D:\Test  #或者在目录下右键打开 Git Bash 窗口

初始化一个新的 Git 仓库:

sh 复制代码
git init [目录]  #缺省则为当前目录

这将在 D:\Test 目录下创建一个新的 Git 仓库

Git基础操作

在 Git 中,工作目录下文件的修改(增加、删除、更新)会经历几个状态,这些状态会随着你执行不同的 Git 命令而发生变化。主要的状态包括:未追踪(Untracked)已暂存(Staged)已提交(Committed)

git status 命令的作用是查看当前 Git 仓库中文件的状态

sh 复制代码
git status

未追踪(Untracked)

未追踪状态指的是 Git 不跟踪该文件的任何变化。这些文件存在于你的工作目录中,但尚未被 Git 跟踪。当你在工作目录中新增一个文件时,它就处于未追踪状态。

处理方法

  • 添加到暂存区(Stage):将未追踪的文件添加到 Git 的暂存区,使其成为已暂存状态,准备提交到仓库中。

    sh 复制代码
    git add <文件名>

    或者,如果要添加所有未追踪的文件:

    sh 复制代码
    git add .

已暂存(Staged)

已暂存状态指的是文件已经被添加到 Git 的暂存区,准备被提交到仓库中。当你执行 git add 命令后,文件就会进入这个状态。

处理方法:
  • 提交到仓+库:将已暂存的文件提交到 Git 仓库中。

    sh 复制代码
    git commit -m "提交说明"
  • 撤销暂存 :如果你想撤销暂存,可以使用 git reset 命令。这会将文件从暂存区移除,但保留在工作目录中的修改。

    sh 复制代码
    git reset <文件名>

已提交(Committed)

已提交状态指的是文件的修改已经被成功提交到 Git 仓库中,成为历史记录的一部分。

  • 查看提交历史 :使用 git log 命令查看提交历史记录。

    sh 复制代码
    git log [option]
    • --all 显示所有分支
    • --pretty=oneline 将提交信息显示为一行
    • --abbrev-commit 使得输出的commitId更简短
    • --graph 以图的形式显示
  • 回滚到历史版本 :如果需要回滚到过去的某个版本,可以使用 git checkoutgit reset 命令,具体取决于是否想保留历史记录。

    sh 复制代码
    git checkout <提交ID> <文件名>  # 恢复单个文件到特定提交状态
    git reset --hard <提交ID>       # 回滚整个仓库到特定提交状态

其他状态和命令:

  • 修改但未暂存 :如果文件已经被 Git 跟踪,但在提交前又有新的修改,它们会处于修改但未暂存的状态。你可以使用 git diff 查看工作目录和暂存区之间的差异,并决定是否要添加修改到暂存区。

    sh 复制代码
    git diff
  • 删除文件 :如果你删除了工作目录中的文件,Git 会将其标记为已删除状态。你可以使用 git rm 命令从暂存区中删除文件,并提交该变更。

    sh 复制代码
    git rm <文件名>
  • 显示日志:即仓库中所有的引用更新历史。它记录了本地仓库中 HEAD 和分支引用的变动,包括提交、合并、重置等操作,即使在分支已被删除或者重置后也能查看到相应的引用历史。

    sh 复制代码
    git reflog

添加文件忽略

将文件添加到 Git 的忽略列表可以防止它们被 Git 跟踪和提交到版本控制系统中。这在某些情况下非常有用,比如临时文件、日志文件、编译生成的文件等不需要进行版本控制的文件。

添加要忽略的文件模式

在工作目录创建并打开 .gitignore 文件,并在其中添加你想要忽略的文件或目录的模式。模式可以是文件名、文件夹名或使用通配符来匹配多个文件。Git 将根据 .gitignore 文件中的规则来忽略相应的文件或目录。以下是一些示例:

  • 忽略特定文件或目录:

    复制代码
    # 忽略临时文件
    temp.txt
    temp/
    
    # 忽略编译生成的文件
    *.exe
    *.dll
    
    # 忽略日志文件
    *.log
  • 使用通配符:

    • * 表示零个或多个字符。
    • ? 表示任意单个字符。
    • ! 表示取消忽略指定模式。

确保 .gitignore 文件本身被跟踪并提交到仓库中,以便所有团队成员都能享有相同的忽略规则。

分支

查看本地分支

使用 git branch 命令可以查看本地仓库中的所有分支。这个命令会列出当前仓库中所有的分支,并且会标注出当前所在的分支(前面带有 * 号)。

命令形式:

sh 复制代码
git branch

示例输出:

假设你有两个分支:masterfeature/new-feature,其中 master 是当前分支。

复制代码
* master
  feature/new-feature

在这个示例中,* 标志表示当前所在的分支是 master

创建本地分支

使用 git branch <分支名> 命令可以创建一个新的本地分支,但是创建后并不会自动切换到该分支,需要使用 git checkoutgit switch 命令切换到新创建的分支。

命令形式:

sh 复制代码
git branch <分支名>

示例:

创建一个名为 feature/new-feature 的新分支:

sh 复制代码
git branch feature/new-feature

切换分支

使用 git checkout <分支名> 命令可以切换到已经存在的本地分支。

命令形式:

sh 复制代码
git checkout <分支名>

示例:

切换到 feature/new-feature 分支:

sh 复制代码
git checkout feature/new-feature

创建并切换到分支

如果要创建一个新的分支并立即切换到该分支,可以使用 git checkout -b <分支名> 命令。

命令形式:

sh 复制代码
git checkout -b <分支名>

示例:

创建并切换到名为 bugfix/123-fix 的新分支:

sh 复制代码
git checkout -b bugfix/123-fix

这个命令相当于执行了以下两个命令:

sh 复制代码
git branch bugfix/123-fix    # 创建新分支
git checkout bugfix/123-fix  # 切换到新分支

合并分支

使用 git merge <分支名> 命令可以将指定分支的更改合并到当前分支。

命令形式:

sh 复制代码
git merge <分支名>

示例:

假设你当前在 master 分支,想将 feature/new-feature 分支合并到 master

sh 复制代码
git checkout master  # 确保当前在 master 分支
git merge feature/new-feature

删除分支

使用 git branch -d <分支名> 命令可以删除一个已经存在的本地分支。需要注意的是,不能删除当前所在的分支,删除分支前需要切换到其他分支。

命令形式:

sh 复制代码
git branch -d <分支名>

如果要强制删除一个分支(即使它包含未合并的更改),可以使用 git branch -D <分支名> 命令。

示例:

删除名为 bugfix/123-fix 的分支:

sh 复制代码
git branch -d bugfix/123-fix

如果想强制删除 bugfix/456-fix 分支,可以使用:

sh 复制代码
git branch -D bugfix/456-fix

冲突解决

当你执行 git mergegit pull 操作时,如果存在冲突,Git 会在合并的过程中停止,并提示你手动解决冲突。冲突会在合并操作的输出中显示。

冲突文件:

Git 会将冲突标记为带有特殊标记的文件,标记的部分指示了冲突发生的位置。你需要手动编辑这些文件来解决冲突。

例如,一个冲突标记可能看起来像这样:

复制代码
<<<<<<< HEAD
这是当前分支的内容
=======
这是要合并的内容
>>>>>>> 分支名
  • <<<<<<< HEAD======= 之间的部分是当前分支(通常是你所在的分支)的修改。
  • =======>>>>>>> 分支名 之间的部分是要合并的分支(通常是你要合并进当前分支的其他分支)的修改。

操作:

  • 解决冲突:在冲突标记之间编辑文件,选择或合并你需要的更改。你可以选择保留当前分支的更改、使用要合并的分支的更改,或者合并两者的内容。

  • 保存文件:解决冲突后,保存文件并关闭编辑器。

  • 添加解决后的文件 :将解决冲突后的文件标记为已解决状态,使用 git add 命令将文件添加到暂存区。

    复制代码
    git add <冲突文件>
  • 完成合并 :继续执行合并操作,使用 git commit 提交已解决的合并。

    复制代码
    git commit
  • 如果你不想保留默认的合并提交消息,可以通过编辑器提供的界面来编辑提交消息。

分支使用原则与流程

在软件开发中,通常会采用一些标准化的分支管理策略,以便有效地管理和协作。以下是常见的分支使用原则与流程:

分支名称 描述 主要用途 合并目标分支
master 线上生产环境的主分支,存放稳定的、经过测试的代码。 发布到生产环境的代码版本
develop master 分支派生,主要用于整个开发团队的集成开发。 所有开发人员的日常工作基础 master(发布)
feature/xxxx develop 分支派生,用于开发新功能或进行特定任务的临时分支。 同期并行开发不同功能或任务 develop
hotfix/xxxx master 分支派生,用于紧急修复线上生产环境中的问题。 紧急修复线上的 bug master, develop
test developmaster 分支派生,用于代码集成测试和验收测试。 确保开发的功能符合预期且不影响现有功能的测试 develop, master
pre develop 分支派生,用于预上线环境测试,准备进行线上发布前的最终验证。 预发布阶段的最终测试和验证 master
release/xxxx develop 分支派生,用于准备发布新版本的临时分支。 发布前的准备工作,包括版本号更新、文档编写等 master
  • 发布到生产环境的代码版本master 分支存放着经过测试并准备发布到生产环境的稳定代码版本。只有经过充分测试和验证的代码才能合并到 master 分支。
  • 所有开发人员的日常工作基础develop 分支是所有开发人员进行日常开发的基础分支,新功能的开发和测试都在这个分支上进行。
  • 同期并行开发不同功能或任务feature/xxxx 分支用于并行开发不同的功能或任务,每个分支对应一个特定的开发任务,完成后合并回 develop 分支。
  • 紧急修复线上的 bughotfix/xxxx 分支通常由 master 分支派生,用于紧急修复线上生产环境中的问题,修复完成后需要合并回 masterdevelop 分支。
  • 确保开发的功能符合预期且不影响现有功能的测试test 分支用于进行集成测试和验收测试,确保开发的功能与预期一致且不会影响现有功能的稳定性。
  • 预发布阶段的最终测试和验证pre 分支用于进行预上线环境的最终测试和验证,确认准备发布到生产环境的代码版本稳定可靠。
  • 发布前的准备工作release/xxxx 分支用于准备发布新版本,包括版本号的更新、文档的编写、最终的测试和验证等工作,完成后将代码合并到 master 分支进行发布。
相关推荐
shughui18 小时前
2026Git 下载、安装、使用完整教程(附安装包)
git·github·代码仓库
渣渣盟20 小时前
Flink Table API与SQL流数据处理实战
大数据·sql·flink·scala
Moshow郑锴1 天前
Git如何上传目录到github项目进行初始化
git
疯狂成瘾者1 天前
上传到 GitHub 的步骤总结
大数据·elasticsearch·github
七夜zippoe1 天前
OpenClaw 接入 WhatsApp:消息推送实战
大数据·人工智能·microsoft·whatsapp·openclaw
RFID科技的魅力1 天前
从开箱到实战:CP300R触屏RFID打印机全场景使用测评
大数据·人工智能·物联网·rfid
Forrit1 天前
Agent长期运行(Long-Running Tasks)实现方案与核心挑战
大数据·人工智能·深度学习
2601_955363151 天前
技术赋能B端拓客:号码核验的行业困局与破局路径氪迹科技法人股东筛选系统,阶梯式价格
大数据·人工智能