文章目录
一、Git 常用操作
1、拉取代码
1.1、拉取(pull)和 获取(fetch)
在 Git 中,拉取(pull) 和 获取(fetch) 是两个常用的操作,用于从远程仓库同步代码。它们的核心区别在于是否自动合并远程变更到本地分支,区别如下:
获取(fetch)
- 作用:git fetch 会从远程仓库下载最新的提交、分支和标签,但不会自动合并或修改本地分支。
- 原理:将远程仓库的最新提交下载到本地,更新本地的远程跟踪分支(如 origin/main)。
拉取(pull)
- 作用:git pull 是 git fetch 和 git merge(或 git rebase)的组合操作。它会从远程仓库下载最新的提交,并自动合并到当前本地分支。
- 原理:先执行 git fetch,下载远程仓库的最新提交。然后执行 git merge(默认)或 git rebase,将远程变更合并到当前分支。
注意:如果想要拉取远程仓库的所有分支,可以使用 git fetch 命令。git fetch 会从远程仓库下载所有分支的最新提交信息到本地仓库,但不会自动合并到本地分支。
1.2、变基(rebase) 和 合并(merge)
在执行 git pull 操作时,变基(rebase) 和 合并(merge) 是两种不同的整合分支变更的方式。以下是它们的区别以及工作原理
合并(merge)
- 工作原理:
- git pull 默认使用合并方式。
- 它会将远程分支的最新提交与当前分支的提交合并,生成一个新的合并提交(Merge Commit)。
- 合并会保留两个分支的完整历史。
- 图示:
- F 是一个新的合并提交,将 main 和 feature 的变更整合到一起。
- 提交历史保留了分支的分叉和合并记录。
变基(rebase)
-
工作原理:
- 使用 git pull --rebase 时,当前分支的提交会“重新应用”到远程分支的最新提交之后。
- 变基不会生成合并提交,而是将当前分支的提交“移动”到目标分支的最新提交之后。
- 提交历史会变成一条直线。
-
图示:
- D’ 和 E’ 是 D 和 E 的副本,但它们基于 C 重新应用。
- 提交历史变成一条直线,没有分叉。
1.3、标签与剪切
在使用 git pull 拉取代码时,标签和剪切选项的作用如下:
标签
- 作用:拉取所有远程标签(tags)。
- 默认行为:git pull 通常只拉取分支更新,不包含标签。
- 使用场景:当你需要同步远程仓库的所有标签时使用。
剪切
- 作用:删除本地已不存在的远程分支的引用。
- 默认行为:git pull 不会自动删除本地对已删除远程分支的引用。
- 使用场景:当远程分支被删除后,清理本地的过时引用。
2、切换分支
git checkout命令可以用于三种不同的实体:文件,commit,以及分支。checkout的意思就是对于一种实体的不同版本之间进行切换的操作。checkout一个分支,会更新当前的工作空间中的文件,使其与检出分支的commit版本状况保持一致。切换分支工作原理如下:
- Git 会检查目标分支是否存在。
- 如果存在,Git 会更新 HEAD 指针,使其指向目标分支的最新提交。
- Git 会将目标分支的最新提交内容更新到 工作目录 和 暂存区。
- 如果工作目录或暂存区有未提交的更改,Git 会尝试合并这些更改。如果合并冲突,Git 会提示用户解决冲突。
注意:git checkout 主要用于切换分支、恢复工作区文件或者检出特定提交。它主要操作的是本地仓库,控制本地工作目录指向不同的分支或提交,并不涉及从远程仓库拉取最新修改的操作。
3、回退版本
通过日志可以看到提交记录,通过git reset命令可以回退到指定版本,如下:
重置代码时有三种类型:软重置、混合、硬重置,下面分别介绍这三种方式的区别
- 软重置 - 仅仅移动版本库HEAD指针,其他什么事都不做,即索引文件(暂存区)、工作区不会重置
- 混合 - reset默认的,不指定reset类型就是它,移动版本库HEAD指针,重置暂存区,但不重置工作区
- 硬重置 - 移动版本库HEAD指针,重置暂存区和工作区。彻底回退到某个版本,本地的代码也会变为某个版本
注意:硬重置一定要慎用,在硬重置之前一定要保存副本
4、同步代码
Git 中的 摘取提交(Cherry-pick) 功能允许你将某个特定的提交(commit)应用到当前分支上。结合一个具体的示例,讲解下相关的操作流程,如下:
背景:
在master分支修改了一个Bug,现在要把这个修改同步到1230分支。
操作流程:
- 代码仓先切换到1230分支。
- 查看日志,并把日志分支切换到master。
- 选择要同步的记录,右键,选择"摘取此提交"。
- 执行 git push 推送到远端仓库。
5、清理
Git 的清理功能主要通过 git clean 命令实现,其核心作用是清除工作目录中那些未被跟踪(untracked)的文件和目录,让工作目录更加整洁,避免无关文件干扰开发流程。