Git终端使用笔记、手册、帮助及Github相关

版本控制是什么

版本控制(Version Control)是一种软件开发和管理实践,它允许开发者或团队跟踪文件或代码的变化历史记录。通过版本控制系统,用户可以记录每次修改的内容、时间、作者以及原因,从而在需要时回滚到之前的版本、比较差异或协作开发。简单来说,它就像一个“时间机器”,让文件或项目的发展过程变得可追溯和可管理。 版本控制通常分为三种类型:

  • 本地版本控制:仅在个人计算机上运行,适合小型项目。
  • 集中式版本控制:依赖中央服务器,所有用户从服务器获取和提交变化。
  • 分布式版本控制:允许每个用户拥有完整的项目副本,提高了灵活性和冗余性。

    为什么要版本控制

    为什么要使用版本控制呢?首先,它能防止数据丢失或覆盖错误。例如,在编写代码时,如果一个修改导致程序崩溃,你可以轻松恢复到之前的稳定版本,而无需从头重写。其次,版本控制促进团队协作。多个开发者可以同时工作在不同分支上,避免冲突,并通过合并功能整合贡献,这在大型项目中尤为重要。 此外,它提供变更历史,帮助调试问题、审计代码或理解项目演变过程。最后,在开源或商业软件开发中,版本控制还能支持分支管理、标签标记和发布版本,确保项目有序推进。总之,没有版本控制,项目管理会变得混乱、易出错,尤其是在复杂环境中。

    有哪些版本控制工具

    常见的版本控制工具有多种选择,每种都有其适用场景。

  • Subversion (SVN):一种经典的集中式系统,适合需要严格权限控制的企业环境。
  • Mercurial:一个分布式工具,以简单易用著称,常用于中小型项目。
  • Perforce (Helix Core):针对大型文件和游戏开发,提供高性能的集中式管理。
  • Bazaar:强调用户友好性,支持分布式协作。
  • CVS(Concurrent Versions System):虽然较老但在一些遗留系统中仍被使用。 当然,最受欢迎的还是Git,它结合了分布式优势并被广泛采用。这些工具的选择取决于项目规模、团队需求和性能要求。

    Git是什么

    Git 是一种分布式版本控制系统,由Linux内核的创建者Linus Torvalds于2005年开发而成。它设计的核心理念是速度、数据完整性和支持非线性开发。Git 通过“快照”方式记录每次提交的状态,而不是仅存储差异,这使得分支和合并操作高效且廉价。 用户可以本地创建仓库,进行提交、分支、合并等操作,而无需网络连接;当需要协作时,再推送到远程仓库。Git 的命令行界面强大,具体见下文。 它还支持钩子(hooks)和子模块(submodules),适用于从个人笔记到大型开源项目的各种场景。截至2025年,Git 已成为软件开发的标准工具,被无数公司如Google、Microsoft和Facebook采用。

    Github是什么

    GitHub 则是基于Git的在线托管平台,由GitHub公司于2008年推出,现隶属于Microsoft。它提供了一个云端的Git仓库服务,让用户可以上传、分享和管理代码。GitHub 的亮点在于其社交功能,如Fork(复制仓库)、Pull Request(提出修改请求)和Issue(问题跟踪),这些促进了开源社区的协作。 用户可以通过网页界面操作仓库,而无需安装Git客户端;它还集成CI/CD工具、项目板和Wiki,支持团队项目管理。此外,GitHub Pages允许免费托管静态网站,GitHub Actions则自动化工作流。相比纯Git,GitHub 更注重社区和可视化,已成为全球最大的代码托管平台,托管了数亿仓库,包括Linux内核和TensorFlow等著名项目。如果你想开始使用,可以在github.com注册账户,并通过git clone命令拉取仓库。

    Git 安装与初始配置

    Git 的安装因操作系统而异。安装后,配置是必需的,因为 Git 使用这些信息标记你的提交(commit)。未配置会导致提交失败或匿名记录。

  • 安装 Git
    • Linux (Debian/Ubuntu): sudo apt update && sudo apt install git。安装后验证:git --version(应显示如 2.45.0 或更高)。
    • macOS: 使用 Homebrew(先安装 Homebrew 如果没有):brew install git。或从官网下载安装包。
    • Windows: 下载官方安装程序(从 git-scm.com),选择 “Use Git from the Windows Command Prompt” 选项。安装后 Git Bash 会可用。
    • 常见问题排查: 如果命令未找到,检查 PATH 环境变量。更新 Git:git --version 检查后,用包管理器升级(如 brew upgrade git)。
    • 最佳实践: 始终使用最新版本以获得安全修复和新功能(如 Git 2.23 引入的 git switch)。
  • 全局配置
    • 设置用户名:git config --global user.name "Your Full Name"(用于 commit 作者)。
    • 设置邮箱:git config --global user.email "your.email@example.com"(必须匹配 GitHub 邮箱以关联贡献)。
    • 配置默认编辑器:git config --global core.editor "nano"(或 “vim”、”code –wait” for VS Code)。默认是 Vim,如果不熟悉会卡住(按 i 编辑,Esc + :wq 保存退出)。
    • 配置默认分支:git config --global init.defaultBranch main(避免使用旧的 “master”)。
    • 查看所有配置:git config --listgit config --global -e(编辑配置文件)。
    • 示例: 新安装后运行:
      git config --global user.name "John Doe"
      git config --global user.email "john@example.com"
      git config --list
    • 本地配置: 用 --local 代替 --global 为特定仓库设置(如不同项目用不同邮箱)。
    • 排查: 如果配置不对,commit 时会警告。使用 git config --unset 删除设置。
  • 其他初始设置
    • 启用颜色输出:git config --global color.ui auto(使 status/log 等更易读)。
    • 设置别名:git config --global alias.co checkout(简化命令,如 git co 代替 git checkout)。
    • 最佳实践: 在 .gitconfig 文件中添加别名以提高效率,例如 alias.st status

      Git 基础命令(本地仓库操作)

      这些命令处理本地文件和历史。核心流程:修改文件 → 添加到暂存区 → 提交到仓库。

  • 初始化仓库
    • 命令:git init [directory]
    • 解释:创建一个新的 Git 仓库,生成 .git 隐藏文件夹(存储所有历史数据)。如果不指定目录,在当前文件夹初始化。
    • 参数:--bare(创建裸仓库,无工作目录,用于服务器);--initial-branch=main(指定初始分支)。
    • 示例:
      mkdir myproject
      cd myproject
      git init
      echo "# My Project" > README.md
    • 排查:如果 .git 已存在,会报错。删除 .git 重试。
    • 最佳实践:初始化后立即创建 .gitignore 和 README.md。
  • 克隆仓库
    • 命令:`git clone [directory]`。
    • 解释:从远程复制整个仓库,包括历史。URL 可以是 HTTPS 或 SSH。
    • 参数:`-b `(克隆特定分支);`–depth 1`(浅克隆,只取最新历史,节省空间);`–single-branch`(只克隆一个分支)。
    • 示例:
      git clone https://github.com/user/repo.git myrepo
      cd myrepo
    • 排查:如果 URL 错或无权限,会失败。检查网络或认证。
    • 最佳实践:对于大仓库,用浅克隆加速。
  • 检查状态与差异
    • git status:显示当前分支、修改文件(未跟踪/修改/暂存)、是否有冲突。
      • 参数:-s(简短输出);--ignored(显示忽略文件)。
      • 示例:修改文件后 git status 显示 “Changes not staged”。
    • git diff:比较工作目录与暂存区差异。
      • 参数:--staged(暂存区 vs 上次 commit);` `(比较两个 commit);`–color-words`(单词级差异)。
      • 示例:git diff HEAD~1(与上一个 commit 比较)。
    • 排查:差异太多?用 git diff --name-only 只看文件名。
    • 最佳实践:养成提交前运行 git statusgit diff 的习惯。
  • 添加与移除文件
    • git add <file|directory|pattern>:将变更添加到暂存区(staging area)。
      • 参数:-A.(添加所有);-p(交互式,选择 hunk);--intent-to-add(仅标记未跟踪文件,不添加内容)。
      • 示例:
        touch file.txt
        echo "Hello" > file.txt
        git add file.txt
        git status  # 显示 "Changes to be committed"
    • `git rm `:移除文件并暂存删除。 – 参数:`–cached`(只从暂存区移除,不删本地文件);`-r`(递归目录)。
    • `git restore `(Git 2.23+):从 HEAD 恢复文件。 – 参数:`–staged`(从暂存区移除);`–worktree`(恢复工作目录)。
    • 排查:意外添加?用 `git restore –staged `。
    • 最佳实践:用 .gitignore 避免添加临时文件(如 *.lognode_modules/)。示例 .gitignore:
      # Logs
      *.log
      # Dependencies
      /node_modules
  • 提交变更
    • git commit:创建提交,将暂存区保存到历史。
      • 参数:-m "Message"(添加消息,必填且描述性强,如 “Fix login bug”);--amend(修改上次 commit);-a(自动 add 已跟踪文件)。
      • 示例:
        git add .
        git commit -m "Initial commit with README"
    • 排查:无暂存变更会失败。消息太长?用编辑器模式(不带 -m)。
    • 最佳实践:小而频繁的 commit。遵循 Conventional Commits(如 “feat: add login”)。
  • 历史查看与回滚
    • git log:显示 commit 历史。
      • 参数:--oneline(单行);--graph(图形化分支);--author="Name"(过滤作者);-p(显示差异);--since="2025-01-01"(时间过滤)。
      • 示例:git log --oneline --graph --all
    • `git show `:显示特定 commit 详情。
    • 回滚:
      • `git revert `:创建新 commit 撤销变更(安全)。
      • `git reset `:移动 HEAD。 – 参数:`–soft`(保留变更);`–mixed`(默认,移除暂存);`–hard`(丢弃一切,危险!)。
      • 示例:git reset --hard HEAD~2(回滚两个 commit)。
    • 排查:历史混乱?用 git reflog 查看所有操作历史。
    • 最佳实践:避免 --hard reset 已 push 的 commit,以防影响团队。

      分支与合并管理

      分支允许并行开发,如 feature/bugfix。

  • 分支操作
    • git branch:列出本地分支(* 表示当前)。
      • 参数:-a(包括远程);`-d `(删除);`-m `(重命名)。
    • `git checkout ` 或 `git switch `:切换分支。 – 参数:`-b`(创建并切换);`-B`(强制创建)。 – 示例: “` git branch feature/new-ui git switch feature/new-ui # 开发… git switch main “`
    • 排查:分支不存在?先创建。冲突文件会阻止切换。
  • 合并与变基
    • `git merge `:将 合并到当前分支。 – 参数:`–no-ff`(强制创建 merge commit);`–abort`(中止冲突合并)。 – 示例:从 main 合并 feature:`git switch main && git merge feature/new-ui`。
    • `git rebase `:将当前分支变基到 ,保持线性历史。 – 参数:`-i`(交互式,选择 commit);`–onto `(高级移动)。 – 示例:`git rebase main`(从 feature 分支变基)。
    • 冲突解决:合并时 Git 会标记冲突文件。编辑后 git add 并 commit。
    • 排查:冲突多?用工具如 git mergetool(配置如 Meld)。
    • 最佳实践:用 rebase 保持干净历史,但 merge 用于公共分支。遵循 Git Flow(如 main 为生产,develop 为开发)。
  • 标签
    • `git tag [commit]`:标记特定 commit(如 v1.0)。 – 参数:`-a`(注解标签,带消息);`-d`(删除);`-l`(列表)。 – 示例:`git tag -a v1.0 -m “Release 1.0″`。 ### 远程操作与协作 远程仓库(如 GitHub)允许分享代码。
  • 远程管理
    • `git remote add `:添加远程(如 `origin`)。 – 参数:`-v`(查看远程);`rm `(移除)。
    • `git fetch `:下载远程更新,不合并。
    • `git pull `:fetch + merge。 – 参数:`–rebase`(用 rebase 代替 merge)。
    • `git push `:上传本地变更。 – 参数:`-u`(设置上游跟踪);`–tags`(推送标签);`–force`(强制,危险)。 – 示例: “` git remote add origin https://github.com/user/repo.git git push -u origin main “`
  • 排查: Push 拒绝?先 pull 解决分歧。认证失败见下文。

    GitHub 相关帮助与终端集成

    GitHub 是 Git 的云托管平台。终端操作需认证。推荐使用 GitHub CLI (gh) 为高级操作。

  • 认证方式
    • HTTPS: 需要 Personal Access Token (PAT)。在 GitHub 设置 > Developer settings > PAT 生成(scopes: repo)。克隆:`git clone https:// :@github.com/user/repo.git`。或用 credential helper:`git config –global credential.helper store`。
    • SSH: 生成密钥:ssh-keygen -t ed25519 -C "email"。添加公钥 (~/.ssh/id_ed25519.pub) 到 GitHub 设置 > SSH keys。测试:ssh -T git@github.com(应显示 “Hi username!”)。
    • 排查:2FA 启用后密码无效,必须用 PAT 或 SSH。
    • 最佳实践:优先 SSH 以避免反复输入凭证。
  • 仓库管理
    • 创建:在 GitHub 网页或 gh:gh repo create myrepo --public --description "My project"
    • 克隆/推送:如上。
    • Fork:gh repo fork user/repo --clone
  • Pull Requests (PR)
    • 创建:gh pr create --base main --head feature --title "Add new UI" --body "Details..."
    • 查看/合并:gh pr listgh pr view 123gh pr merge 123 --squash
    • 参数:--draft(草稿 PR);--reviewer @user(指定审阅者)。
    • 示例:贡献开源 – fork、branch、commit、push、创建 PR。
    • 排查:PR 冲突?用 git pull --rebase origin main 解决。
  • Issues 管理
    • 创建:gh issue create --title "Bug: Login fails" --body "Steps to reproduce..." --label bug
    • 查看:gh issue list --label buggh issue close 45
    • 参数:--assignee @user--milestone "v1.0"
  • GitHub CLI (gh) 详细指南
    • 安装:macOS brew install gh;Windows winget;Linux 见官网。
    • 认证:gh auth login(浏览器授权)。
    • 高级命令:
      • 仓库:gh repo view(详情);gh repo edit --add-topic ai
      • Actions:gh workflow listgh run list;`gh run watch `(监控 workflow)。
      • 搜索:gh search repos "topic:git" --limit 10
      • 扩展:gh extension install owner/repo(社区插件)。
    • 示例:完整流程 `gh repo create && git init && git add . && git commit -m “Init” && gh repo clone . –remote-name origin && git push -u origin main`。
    • 排查:gh 未安装?检查 gh --version。更新:gh auth refresh
  • 协作最佳实践
    • Fork + PR 模型用于开源。
    • 用 GitHub Actions 从终端触发:编辑 .github/workflows/*.yml 并 push。
    • 安全:避免 commit 敏感数据(用 git-secrets 工具扫描)。

      高级主题与提示

  • Stash: 临时保存变更 git stash push -m "WIP";恢复 git stash pop;列表 git stash list
  • 子模块: `git submodule add path`;更新 `git submodule update –init –recursive`。
  • Cherry-pick: `git cherry-pick `(挑选 commit 到当前分支)。
  • Bisect: 调试 bug git bisect startgit bisect good/bad(二分查找)。
  • 钩子 (Hooks): 在 .git/hooks 添加脚本,如 pre-commit 检查代码风格。
  • 大文件 (LFS): 安装 git-lfs,git lfs track "*.psd" 处理二进制文件。
  • 清理与优化: git gc --prune=now(垃圾回收);git clean -fdx(移除未跟踪,-n 预览)。
  • 常见错误:
    • “Detached HEAD”: 用 git checkout main 修复。
    • 冲突: 搜索 “<<<<<<<" 标记,手动解决。
    • Push 失败: git pull 先同步。

      资源与 Cheat Sheet

  • 官方:Git Book (git-scm.com/book),GitHub Docs (docs.github.com)。
  • 教程:DataCamp 的学习计划,freeCodeCamp 的 CLI 指南,AWS 的命令速查。
  • Cheat Sheet(摘自 GitHub Education):
    • 配置: git config --global user.name/email
    • 初始化: git init
    • 克隆: git clone url
    • 状态: git status
    • 添加: git add file
    • 提交: git commit -m "msg"
    • 分支: git branch; git checkout -b branch
    • 合并: git merge branch
    • 推送: git push origin branch
    • 拉取: git pull origin branch
    • 日志: git log --oneline --decorate --graph
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容