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"
一般的提交信息结构由三部分组成:
- 类型(type):描述提交的性质。
- 范围(scope)(可选):描述提交影响的范围,通常是某个功能模块或文件。
- 描述(description):简要说明这次提交做了什么。
提交信息的格式是:
<type>(<scope>): <description>
-
type
:一般由以下几种类型组成:feat
:新功能(feature)。fix
:修复 bug。docs
:文档修改。style
:格式、代码风格的修改(不影响代码逻辑)。refactor
:代码重构(既不是修复 bug 也不是添加新功能)。perf
:性能优化。test
:增加或修改测试用例。chore
:杂项任务,如依赖更新、构建过程修改等。build
:与构建工具或流程相关的改动。ci
:持续集成相关的修改。
-
scope
(可选):表示影响的模块、文件或部分。例如,auth
、api
、ui
等。 -
description
:简明扼要地描述本次提交的目的和内容。
这个由团队约束,自己使用的话就是 FEAT FIX DOCS 就可以啦。
查看提交历史
查看提交历史。
git log
git log --graph
我更喜欢第二种,如果觉得长,可以设置别名。
例如,设置 git st
为 git status
的别名:
git config --global alias.st status
以后你就可以用 git st
来代替 git status
。
2. 如何推送到 GitHub
创建 GitHub 仓库
- 登录到 GitHub。
- 点击右上角的 +,选择 New repository。
- 填写仓库名称、描述,并选择是否公开或私有。
- 点击 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 push
或 git 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
合并的结果:
- 非冲突合并:Git 会自动创建一个新的合并提交,
feature
分支会有一个新的提交记录,表明它已经合并了main
分支的内容。 - 有冲突合并:如果存在冲突,你需要手动解决冲突并提交合并结果。
合并的优缺点:
- 优点:
- 保留了提交历史中的所有信息,清晰地记录了分支和合并的历史。
- 合并提交是自动的,避免了手动重写历史。
- 缺点:
- 如果频繁合并,历史记录可能会变得非常复杂和杂乱,特别是在多人协作时,可能会有大量的合并提交。
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 的工作流程:
git rebase main
会把feature
分支的提交从main
分支的起点开始重放(reapply)。- Git 会将
feature
分支的每个提交逐一应用到main
分支的提交之上。 - 如果在
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
:将分支的提交“移到”目标分支上,保持线性历史,用于清理提交历史,但可能会重写历史,谨慎使用。
常见问题
-
如何查看远程仓库地址?
git remote -v
-
如何切换分支?
git checkout branch-name
-
如何创建新分支?
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 # 查看所有别名