Git 实战秘籍:从萌新到高手全解析

文章标题:

Git 实战秘籍:从新手到高手全解析

文章内容:

在这里插入图片描述

Git属于当前十分流行的分布式版本控制系统,在软件开发里被广泛运用。本文将会全面介绍Git的各类功能以及使用办法,其中包含大量的代码示例和实践方面的建议。

文章目录

    • Git基础概念
      • 版本控制系统
    • Git的特点
    • Git的三个区域
    • Git文件状态
    • Git安装与配置
      • 安装Git
      • Linux
      • macOS
      • Windows
    • 初始配置
    • Git仓库创建与管理
      • 初始化新仓库
    • 克隆现有仓库
    • 查看仓库状态
    • 忽略文件
    • Git基本工作流程
      • 添加文件到暂存区
    • 提交更改
    • 查看提交历史
    • 比较差异
    • Git分支管理
      • 创建与切换分支
    • 合并分支
    • 解决冲突
    • 变基(Rebase)
    • Git远程仓库操作
      • 查看远程仓库
    • 添加/移除远程仓库
    • 获取与拉取
    • 推送
    • Git撤销与回退
      • 撤销工作目录修改
    • 撤销暂存区修改
    • 修改最后一次提交
    • 回退提交
    • 恢复删除的文件
    • Git标签管理
      • 创建标签
    • 查看标签
    • 推送标签
    • 删除标签
    • 检出标签
    • Git高级操作
      • 储藏更改
    • 二分查找
    • 子模块
    • 重写历史
    • 打包与归档
    • Git协作工作流
      • 集中式工作流
    • 功能分支工作流
    • Git Flow
    • Forking工作流
    • Git问题排查
      • 查看文件修改历史
    • 查找问题提交
    • 恢复丢失的提交
    • 清理仓库
    • Git最佳实践
      • 提交规范
    • 分支命名规范
    • 工作流程建议
    • 大型项目建议
    • 安全性建议
    • 总结

在这里插入图片描述

Git基础概念

版本控制系统

版本控制系统(Version Control System,VCS)是一种能够记录文件内容变化的系统,借此可以在日后查阅特定版本的修订情况。

Git的特点

  1. 分布式:每一位开发者都拥有完整的仓库副本
  2. 高效:大部分操作在本地就能完成
  3. 完整性:运用SHA-1哈希来保障数据的完整性
  4. 灵活性:支持多种非线性的开发流程

Git的三个区域

  1. 工作目录(Working Directory):实际文件所处的目录
  2. 暂存区(Staging Area):准备进行提交的文件快照
  3. Git仓库(Repository):永久存储的文件快照

Git文件状态

  1. 未跟踪(Untracked):新的文件,还未被Git进行管理
  2. 已修改(Modified):文件已经修改但还没有暂存
  3. 已暂存(Staged):文件已修改且标记为下次提交
  4. 已提交(Committed):文件已安全存储在本地数据库中

Git安装与配置

安装Git

Linux
    # Debian/Ubuntu
    sudo apt-get install git

    # Fedora
    sudo dnf install git

    # CentOS
    sudo yum install git
macOS
    # 使用 Homebrew
    brew install git

    # 或下载官方安装包
    https://git-scm.com/download/mac
Windows

下载Git for Windows:https://git-scm.com/download/win

初始配置

配置用户信息:

    git config --global user.name "Your Name"
    git config --global user.email "your.email@example.com"

配置默认编辑器:

    git config --global core.editor "vim"

查看配置:

    git config --list

常用别名配置:

    git config --global alias.co checkout
    git config --global alias.br branch
    git config --global alias.ci commit
    git config --global alias.st status
    git config --global alias.unstage 'reset HEAD --'
    git config --global alias.last 'log -1 HEAD'

Git仓库创建与管理

初始化新仓库

    mkdir my-project
    cd my-project
    git init

克隆现有仓库

    git clone https://github.com/user/repo.git
    git clone https://github.com/user/repo.git my-local-folder  # 指定本地目录名
    git clone --depth 1 https://github.com/user/repo.git  # 浅克隆,只获取最新版本

查看仓库状态

    git status
    git status -s  # 简洁输出

忽略文件

创建.gitignore文件:

    # 忽略所有 .a 文件
    *.a

    # 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
    !lib.a

    # 忽略当前目录下的 TODO 文件
    /TODO

    # 忽略 build/ 目录下的所有文件
    build/

    # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
    doc/*.txt

    # 忽略 doc/ 目录下所有 .pdf 文件
    doc/**/*.pdf

    # 忽略所有 .log 文件
    *.log

    # 忽略 node_modules 目录
    node_modules/

    # 忽略 .env 环境文件
    .env

Git基本工作流程

添加文件到暂存区

    git add file1.txt  # 添加单个文件
    git add file2.txt file3.txt  # 添加多个文件
    git add .  # 添加所有修改和新文件
    git add -A  # 添加所有修改、新文件和删除操作
    git add -u  # 添加所有修改和删除,但不包括新文件
    git add -p  # 交互式添加

提交更改

    git commit -m "Initial commit"  # 简单提交
    git commit -a -m "Commit all changes"  # 跳过暂存区,直接提交所有已跟踪文件的修改
    git commit --amend  # 修改最后一次提交
    git commit --amend --no-edit  # 修改最后一次提交但不修改提交信息

查看提交历史

    git log
    git log -p  # 显示每次提交的内容差异
    git log -2  # 显示最近2次提交
    git log --stat  # 显示简略统计信息
    git log --pretty=oneline  # 单行显示
    git log --pretty=format:"%h - %an, %ar : %s"
    git log --since=2.weeks  # 显示两周内的提交
    git log --author="John"  # 按作者筛选
    git log --grep="bug fix"  # 按提交信息筛选
    git log -S"function_name"  # 按代码内容筛选
    git log -- path/to/file  # 查看特定文件的修改历史
    git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit  # 漂亮的图形化输出

比较差异

    git diff  # 工作目录与暂存区的差异
    git diff --staged  # 暂存区与最后一次提交的差异
    git diff HEAD  # 工作目录与最后一次提交的差异
    git diff branch1..branch2  # 两个分支间的差异
    git diff commit1 commit2  # 两次提交间的差异
    git diff --name-only commit1 commit2  # 只显示有差异的文件名
    git diff --word-diff  # 单词级别的差异

Git分支管理

创建与切换分支

    git branch  # 查看本地分支
    git branch -a  # 查看所有分支(包括远程)
    git branch new-branch  # 创建新分支
    git checkout branch-name  # 切换分支
    git checkout -b new-branch  # 创建并切换到新分支
    git checkout -b new-branch origin/remote-branch  # 基于远程分支创建本地分支
    git branch -d branch-name  # 删除已合并的分支
    git branch -D branch-name  # 强制删除分支
    git branch -m old-name new-name  # 重命名分支
    git branch --merged  # 查看已合并到当前分支的分支
    git branch --no-merged  # 查看未合并到当前分支的分支

合并分支

    git merge branch-name  # 合并指定分支到当前分支
    git merge --no-ff branch-name  # 禁用快进合并
    git merge --squash branch-name  # 压缩合并
    git merge --abort  # 中止合并

解决冲突

当合并发生冲突时,Git会在冲突文件中标记冲突部分:

    <<<<<<< HEAD
    当前分支的内容
    =======
    要合并的分支的内容
    >>>>>>> branch-name

手动解决冲突后:

    git add resolved-file.txt
    git commit

变基(Rebase)

    git rebase branch-name  # 将当前分支变基到指定分支
    git rebase --continue  # 解决冲突后继续变基
    git rebase --abort  # 中止变基
    git rebase -i HEAD~3  # 交互式变基,修改最近3次提交

交互式变基常用操作:
* pick: 使用提交
* reword: 使用提交但修改提交信息
* edit: 使用提交但暂停修改
* squash: 将提交合并到前一个提交
* fixup: 类似squash但丢弃提交信息
* drop: 删除提交

Git远程仓库操作

查看远程仓库

    git remote  # 列出远程仓库
    git remote -v  # 显示远程仓库URL
    git remote show origin  # 显示远程仓库详细信息

添加/移除远程仓库

    git remote add origin https://github.com/user/repo.git  # 添加远程仓库
    git remote rename origin new-name  # 重命名远程仓库
    git remote remove origin  # 移除远程仓库
    git remote set-url origin https://github.com/user/new-repo.git  # 修改远程仓库URL

获取与拉取

    git fetch origin  # 从远程获取最新信息但不合并
    git fetch --prune  # 清理已不存在的远程分支的本地引用
    git pull origin master  # 获取并合并远程分支
    git pull --rebase  # 使用变基方式拉取

推送

    git push origin master  # 推送本地分支到远程
    git push -u origin master  # 推送并设置上游分支
    git push origin --delete branch-name  # 删除远程分支
    git push origin --tags  # 推送所有标签
    git push origin HEAD  # 推送当前分支
    git push --force  # 强制推送(慎用)
    git push --force-with-lease  # 更安全的强制推送

Git撤销与回退

撤销工作目录修改

    git checkout -- file.txt  # 撤销工作目录中文件的修改
    git checkout -- .  # 撤销所有工作目录修改

撤销暂存区修改

    git reset HEAD file.txt  # 将文件从暂存区移出
    git reset HEAD .  # 将所有文件从暂存区移出

修改最后一次提交

    git commit --amend  # 修改提交信息或内容
    git commit --amend --no-edit  # 修改提交内容但不修改信息

回退提交

    git reset --soft HEAD~1  # 回退提交但保留修改在暂存区
    git reset --mixed HEAD~1  # 回退提交并保留修改在工作目录(默认)
    git reset --hard HEAD~1  # 彻底回退提交,丢弃所有修改
    git revert HEAD  # 创建新提交来撤销之前的提交

恢复删除的文件

    git checkout HEAD -- deleted-file.txt  # 恢复已删除的文件
    git checkout $(git rev-list -n 1 HEAD -- deleted-file.txt)^ -- deleted-file.txt  # 恢复在之前提交中删除的文件

Git标签管理

创建标签

    git tag v1.0  # 轻量标签
    git tag -a v1.0 -m "Version 1.0"  # 附注标签
    git tag -a v1.0 9fceb02  # 给特定提交打标签
    git tag -s v1.0 -m "Signed version 1.0"  # 签名标签

查看标签

    git tag  # 列出所有标签
    git show v1.0  # 查看标签详情
    git tag -l "v1.*"  # 过滤标签

推送标签

    git push origin v1.0  # 推送单个标签
    git push origin --tags  # 推送所有标签

删除标签

    git tag -d v1.0  # 删除本地标签
    git push origin --delete v1.0  # 删除远程标签
    git push origin :refs/tags/v1.0  # 另一种删除远程标签的方式

检出标签

    git checkout v1.0  # 检出标签(进入分离头指针状态)
    git checkout -b version1 v1.0  # 基于标签创建新分支

Git高级操作

储藏更改

    git stash  # 储藏当前工作目录和暂存区的修改
    git stash save "message"  # 带消息的储藏
    git stash list  # 列出所有储藏
    git stash apply  # 应用最近的储藏
    git stash apply stash@{1}  # 应用特定储藏
    git stash pop  # 应用并移除最近的储藏
    git stash drop stash@{1}  # 删除特定储藏
    git stash clear  # 清除所有储藏
    git stash branch new-branch  # 从储藏创建新分支
    git stash -u  # 储藏包括未跟踪文件
    git stash -a  # 储藏包括所有文件(包括.gitignore忽略的)

二分查找

    git bisect start  # 开始二分查找
    git bisect bad  # 当前版本有问题
    git bisect good v1.0  # v1.0版本是好的
    git bisect reset  # 结束二分查找
    git bisect run test-script.sh  # 自动运行测试脚本进行二分查找

子模块

    git submodule add https://github.com/user/repo.git path/to/submodule  # 添加子模块
    git submodule init  # 初始化子模块
    git submodule update  # 更新子模块
    git submodule update --init --recursive  # 递归初始化并更新所有子模块
    git submodule foreach 'git checkout master'  # 对所有子模块执行命令
    git clone --recurse-submodules https://github.com/user/repo.git  # 克隆包含子模块的仓库

重写历史

    git filter-branch --tree-filter 'rm -f passwords.txt' HEAD  # 从所有提交中删除文件
    git filter-branch --commit-filter '
        if [ "$GIT_AUTHOR_EMAIL" = "old@email.com" ];
        then
            GIT_AUTHOR_NAME="New Name";
            GIT_AUTHOR_EMAIL="new@email.com";
            git commit-tree "$@";
        else
            git commit-tree "$@";
        fi' HEAD  # 修改作者信息

注意:重写历史会改变提交哈希,只适用于尚未共享的提交。

打包与归档

    git bundle create repo.bundle HEAD master  # 创建包含master分支的bundle文件
    git clone repo.bundle repo -b master  # 从bundle文件克隆
    git archive --format=zip HEAD > archive.zip  # 创建当前提交的zip归档
    git archive --format=tar --prefix=project/ HEAD | gzip > project.tar.gz  # 创建带前缀的tar.gz归档

Git协作工作流

集中式工作流

  1. 开发者克隆中央仓库
  2. 在本地提交更改
    3.

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12833.html

(0)
LomuLomu
上一篇 4小时前
下一篇 2小时前

相关推荐

  • 2025年最新DataGrip永久破解教程 💻 附激活码&破解补丁下载

    本教程适用于JetBrains全家桶(IDEA、PyCharm、DataGrip、GoLand等)所有产品!✨ 先给大家看看最新成功破解的效果截图,有效期直接拉到2099年,简直不要太爽!🎉 下面我就手把手教你如何永久激活DataGrip,这个方法同样适用于旧版本哦~🔧 无论你用的是Windows、Mac还是Linux系统,都能完美破解! 第一步:下载Dat…

    2025 年 5 月 12 日
    20400
  • 2025年PyCharm破解详解:最新激活码获取与永久激活教程

    PyCharm是目前最流行的Python IDE之一,由JetBrains公司开发,拥有强大的代码分析、调试和自动补全功能。虽然社区版是免费的,但许多高级功能仅在专业版中提供。今天,我将为大家分享如何在2025年永久激活PyCharm专业版,让你可以使用所有高级功能。 首先展示一下激活成功的效果,如下图所示,激活有效期直到2099年,这足以支持我们长期使用了…

    PyCharm破解教程 2025 年 4 月 28 日
    64000
  • Spring框架下的RESTful风格重构

    前言 REST,即“表现层状态转移”,它确立了互联网软件服务的架构规则。若一个架构契合REST的相关原则,便被称作RESTful架构,这是当下流行的互联网软件服务架构设计风格之一。 要知道,REST并非是一种标准,更像是一种架构理念与设计准则,其目的在于让Web API更为简洁、便于理解和使用。 在开发过程中,后端常常需要向客户端提供API接口以供使用,所以…

    2025 年 6 月 25 日
    4100
  • pycharm激活码,pycharm2024激活教程(win,mac)

    pycharm激活码,pycharm2024激活教程(win,mac) 本教程适用于IDEA、PyCharm、DataGrip、Goland等,支持Jetbrains全家桶! 直接进入正题,先上最新PyCharm版本破解成功的截图,如下展示,可以看到已经成功破解到 2099 年辣,舒服! 接下来,接下来我会用图加文字, 来详细讲解如何激活 PyCharm至 …

    2025 年 4 月 9 日
    24700
  • 2025年最新DataGrip永久破解教程(附激活码/注册码)🔥

    还在为DataGrip的激活问题发愁吗?🤔 今天给大家带来一个超详细的破解教程,适用于JetBrains全家桶(IDEA、PyCharm、DataGrip、Goland等),让你轻松使用到2099年!💪 先看看最新版本的破解效果,已经成功激活到2099年啦!🎉 1️⃣ 下载DataGrip安装包 如果你已经下载好了,可以跳过这一步哦~ 访问DataGrip官…

    DataGrip激活码 2025 年 7 月 1 日
    15300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信