Git快速入门 - Some-soda

Git快速入门

0. 注意!

注意代理问题,例如PowerShell:

$Env:http_proxy="http://127.0.0.1:7890";$Env:https_proxy="http://127.0.0.1:7890"

1. Git 快速入门

安装 Git

首先,需要安装 Git。如果尚未安装,可以从 Git 官方网站 下载并安装,安装过程无脑下一步就好了。

配置 Git

安装完 Git 后,需要配置你的名字和电子邮件,这将用于 Git 提交记录中,也不用写真的。

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

初始化 Git 仓库

进入你的项目目录,并使用以下命令初始化一个新的 Git 仓库。

git init

这将在你的项目文件夹中创建一个 .git 文件夹,这是 Git 用来追踪版本控制的目录,把他删除了Git仓库也就消失了,但是其他文件都在。

查看仓库状态

查看当前的 Git 仓库状态,显示已修改的文件、未跟踪的文件等。

git status

跟踪文件

将文件添加到 Git 的跟踪列表中。你可以单独添加文件或添加所有更改。

git add <filename>         # 添加单个文件
git add .                  # 添加所有文件

提交更改

提交你添加的更改并记录提交消息。

git commit -m "Your commit message"

一般的提交信息结构由三部分组成:

  1. 类型(type):描述提交的性质。
  2. 范围(scope)(可选):描述提交影响的范围,通常是某个功能模块或文件。
  3. 描述(description):简要说明这次提交做了什么。

提交信息的格式是:

<type>(<scope>): <description>
  • type:一般由以下几种类型组成:

    • feat:新功能(feature)。
    • fix:修复 bug。
    • docs:文档修改。
    • style:格式、代码风格的修改(不影响代码逻辑)。
    • refactor:代码重构(既不是修复 bug 也不是添加新功能)。
    • perf:性能优化。
    • test:增加或修改测试用例。
    • chore:杂项任务,如依赖更新、构建过程修改等。
    • build:与构建工具或流程相关的改动。
    • ci:持续集成相关的修改。
  • scope(可选):表示影响的模块、文件或部分。例如,authapiui等。

  • description:简明扼要地描述本次提交的目的和内容。

这个由团队约束,自己使用的话就是 FEAT FIX DOCS 就可以啦。

查看提交历史

查看提交历史。

git log
git log --graph

我更喜欢第二种,如果觉得长,可以设置别名。

例如,设置 git stgit status 的别名:

git config --global alias.st status

以后你就可以用 git st 来代替 git status

2. 如何推送到 GitHub

创建 GitHub 仓库

  1. 登录到 GitHub
  2. 点击右上角的 +,选择 New repository
  3. 填写仓库名称、描述,并选择是否公开或私有。
  4. 点击 Create repository 创建仓库。

关联远程仓库

在 GitHub 上创建仓库后,你需要将本地 Git 仓库与 GitHub 上的远程仓库关联。

git remote add origin https://github.com/yourusername/your-repository.git

推送到 GitHub

将本地仓库推送到 GitHub。首先,推送 main 分支。

git push -u origin main

-u 参数将会为 main 分支设置默认的上游仓库,以便以后可以只用 git pushgit pull 命令。

push推送到云,pull从云拷贝。

推送到其他分支

如果你在其他分支上工作,并且想推送该分支到 GitHub:

git push origin your-branch-name

3. 如何从 GitHub 拉取代码

克隆 GitHub 仓库

如果你想从 GitHub 上克隆仓库到本地:

git clone https://github.com/yourusername/your-repository.git

拉取最新的远程更改

当远程仓库有更改时,可以使用 git pull 拉取最新的更改并合并到当前分支。

git pull origin main

这将会拉取 main 分支的最新代码,放心你本地的修改不会被覆盖。

拉取最新的远程更改,最佳实践。

git pull --rebase

git pull –rebase:拉取远程更改后,通过 rebase 将本地更改应用到远程更改的基础之上,保持提交历史的线性,避免了合并提交。

git pull –rebase 常用于保持提交历史整洁,尤其是在个人开发或小团队协作中,可以避免生成大量的合并提交。

4. Git 分支整合

Git Merge

git merge 是 Git 中最常用的合并命令,它将一个分支的更改合并到当前分支。

工作原理:

  • 当你执行 git merge 时,Git 会将目标分支(通常是当前分支的父分支)的所有提交,合并到当前分支的提交历史中。
  • 如果两个分支的提交没有冲突,Git 会自动将更改合并到一起,创建一个新的 合并提交(merge commit) 来记录合并操作。
  • 如果有冲突,Git 会提示你手动解决冲突,解决完后再提交合并。
git merge <branch-name>

示例:

假设你在 feature 分支上开发,而你想将 main 分支的更改合并到 feature 分支中。

# 切换到 feature 分支
git checkout feature

# 将 main 分支的更改合并到 feature 分支
git merge main
合并的结果:
  1. 非冲突合并:Git 会自动创建一个新的合并提交,feature 分支会有一个新的提交记录,表明它已经合并了 main 分支的内容。
  2. 有冲突合并:如果存在冲突,你需要手动解决冲突并提交合并结果。

合并的优缺点:

  • 优点
    • 保留了提交历史中的所有信息,清晰地记录了分支和合并的历史。
    • 合并提交是自动的,避免了手动重写历史。
  • 缺点
    • 如果频繁合并,历史记录可能会变得非常复杂和杂乱,特别是在多人协作时,可能会有大量的合并提交。

Git Rebase

git rebase 是另一个合并分支的方式,它的工作方式与 git merge 不同。rebase 会将一个分支的提交 “移到” 另一个分支的顶部。

工作原理:

  • git rebase 将当前分支的提交 “移” 到目标分支的提交之上,类似于将你的提交复制到目标分支上。
  • 执行 rebase 后,Git 会重写提交历史,使得提交看起来像是基于目标分支的最新提交。
  • 通过 rebase,你可以避免产生额外的合并提交,保持提交历史的整洁。

语法:

git rebase <branch-name>

示例:

假设你在 feature 分支上开发,想将 main 分支的更改移到 feature 分支之前。

# 切换到 feature 分支
git checkout feature

# 将 feature 分支的提交移到 main 分支的提交之上
git rebase main

Rebase 的工作流程:

  1. git rebase main 会把 feature 分支的提交从 main 分支的起点开始重放(reapply)。
  2. Git 会将 feature 分支的每个提交逐一应用到 main 分支的提交之上。
  3. 如果在 rebase 过程中出现冲突,你需要手动解决冲突,然后使用 git rebase --continue 来继续。

Rebase 的作用与代价:

  • 作用
    • 提交历史更加简洁、线性,避免了大量的合并提交。
    • 更加清晰的历史记录,尤其是在个人开发时,rebase 可以使得提交历史看起来像是一直在一个分支上进行的工作。
    • 在代码审查过程中,历史会更干净,避免看到不必要的合并提交。
  • 代价
    • 重写历史:rebase 会重写提交历史,可能会导致问题,特别是在多人协作时。如果其他人已经基于你进行的 rebase 进行了工作,可能会造成冲突。
    • 对于公共分支,尤其是已经推送到远程仓库的分支,rebase 可能会导致问题,因为它会改变提交的 SHA(哈希值),其他开发者可能会遇到问题。

Merge vs Rebase

特性 Git Merge Git Rebase
历史记录 保留所有历史,生成合并提交。 压平历史,提交线性,没有合并提交。
分支历史 在合并提交中包含两个分支的历史。 提交历史看起来像是基于目标分支的线性提交。
冲突处理 如果合并时有冲突,手动解决冲突。 在重放提交时有冲突,手动解决冲突并继续。
提交历史 可能会有大量的合并提交,历史可能变得复杂。 历史更简洁,避免了合并提交。
适用场景 适用于多人协作时,能保留分支的合并记录。 适用于在自己的分支上进行工作并保持清晰历史。
对公共分支的影响 不会修改历史,适合推送到公共分支。 会修改历史,不适合推送到公共分支。

何时使用 Merge 和 Rebase

  • 使用 git merge

    • 当你想保留分支历史时,尤其是在多人协作时,merge 更加安全。它不会修改历史记录,也不会改变已经推送的提交。
    • 对于已经推送到远程的公共分支,应该避免使用 rebase,而是使用 merge
  • 使用 git rebase

    • 当你希望提交历史保持线性时,rebase 是一个更好的选择。它能使提交历史更加整洁,特别是在个人开发时。
    • 在本地的工作分支中使用 rebase,将最新的主分支(如 main)的更改整合到你的开发分支中,确保历史的干净和简洁。

  • merge:保留合并历史,适合多人协作,生成合并提交,历史更加清晰但可能复杂。
  • rebase:将分支的提交“移到”目标分支上,保持线性历史,用于清理提交历史,但可能会重写历史,谨慎使用。

常见问题

  1. 如何查看远程仓库地址?

    git remote -v
  2. 如何切换分支?

    git checkout branch-name
  3. 如何创建新分支?

    git checkout -b new-branch-name

先写这么多,完全够用了, Git复杂的不是命令,而是提交模型,我会出视频的哦。

常用速记表,Mini or More。

Mini

git init
git add .
git commit -m ""
git push


git log --grahp
git checkout xxxx

More

# 初始化 Git 仓库
git init

# 配置 Git 用户信息
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

# 查看 Git 配置信息
git config --list

# 检查当前 Git 状态
git status

# 添加文件到暂存区
git add <file>             # 添加单个文件
git add .                  # 添加当前目录下的所有文件

# 提交更改
git commit -m "Your commit message"

# 查看提交历史
git log                    # 简单历史
git log --oneline           # 简洁历史
git log --graph --oneline   # 图形化历史

# 切换分支
git checkout <branch>      # 切换到指定分支
git checkout -b <branch>   # 创建并切换到新分支

# 创建新分支
git branch <branch>        # 创建新分支

# 删除分支
git branch -d <branch>     # 删除本地分支
git branch -D <branch>     # 强制删除本地分支

# 查看当前分支
git rev-parse --abbrev-ref HEAD

# 推送到远程仓库
git push origin <branch>   # 推送当前分支到远程
git push -u origin <branch> # 设置上游分支并推送

# 拉取远程仓库的更改
git pull origin <branch>   # 拉取并合并远程更改

# 获取远程仓库更改(不合并)
git fetch origin

# 克隆远程仓库
git clone <repo-url>

# 合并分支
git merge <branch>         # 将指定分支合并到当前分支

# 解决合并冲突后标记为已解决
git add <conflicted-file>
git commit

# 暂存未提交的修改(保存当前工作进度)
git stash
git stash pop              # 恢复暂存的修改
git stash list             # 查看所有的 stash

# 比较文件修改
git diff                   # 查看未暂存的更改
git diff --staged           # 查看已暂存的更改

# 重置本地文件为最新提交状态
git checkout -- <file>     # 恢复单个文件到最新提交状态
git reset --hard           # 重置所有文件到最新提交状态

# 删除未跟踪的文件
git clean -f

# 查看远程仓库信息
git remote -v              # 查看远程仓库 URL
git remote show origin     # 查看远程仓库详细信息

# 设置远程仓库
git remote add origin <url>   # 添加远程仓库
git remote remove origin      # 删除远程仓库

# 显示 Git 配置文件内容
git config --global --get-regexp alias   # 查看所有别名