Git 从入门到进阶:基础命令与多分支

在平时的开发中,Git 是我们不可或缺的版本控制工具。这篇博客将结合我的实际终端操作,带你从零开始,深入掌握 Git 的文件追踪、版本回滚、分支管理以及最让人头疼的冲突解决。

一、 基础环境与仓库初始化

首先,如果你还没有安装 Git,可以前往 Git 官网下载最新的安装包:https://git-scm.com/download/winhttps://git-scm.com/download/win 安装完成后,第一步需要做的就是设定你的用户名和邮箱,这相当于你在代码提交历史中的"身份证",用来区分不同的用户,配置全局用户名和邮箱:

bash 复制代码
git config --global user.name "Your Name"  # 设置你的用户名 [cite: 303]
git config --global user.email "email@example.com"  # 设置你的邮箱 [cite: 304]

接着,我们可以将任意一个文件夹转化为 Git 仓库。进入目标文件夹,执行:

bash 复制代码
git init

执行后,会自动生成一个 .git 隐藏目录,这就是 Git 用来记录版本变化的核心文件夹,而当前目录就是我们的工作目录 。

创建成功后,我们可以查看一下当前的一个状态,输入:

bash 复制代码
git status

如果已经成功配置为Git本地仓库,那么输入后可以看到:

bash 复制代码
On branch master
No commits yet

这表示我们还没有向仓库中提交任何内容,也就是一个空的状态。

二、 文件的追踪、提交与忽略

1. 文件的状态转换 (Untracked -> Staged -> Committed)

当我们在目录中新建一个文件(例如 hello.txt),输入 git status,会看到它处于 Untracked files(未追踪状态)。这意味着 Git 目前不会记录它的任何变化 。

我们需要将其放入暂存区并提交:

添加暂存区:执行 git add hello.txt(如果文件多,可以用" git add . " 一次性添加全部)。此时文件变绿,变为 Changes to be committed 。

正式提交:执行 git commit -m 'Hello World' 将其提交到本地仓库,-m 后面必须跟着此次提交的描述 。

快捷提交修改 :对于已经追踪过的文件,如果后续发生了修改,可以直接使用 git commit -a -m '提交描述' ,这会自动将已修改的文件放入暂存区并完成提交,省去手动 add 的步骤

2. 配置 .gitignore 忽略规则

开发中有些文件不需要提交(如日志、缓存文件)。我们可以创建一个 .gitignore 文件来配置忽略列表,只要文件没有被追踪过,Git 就会完全无视它们 。常用的匹配规则如下:

bash 复制代码
*.txt          # 匹配所有以 txt 结尾的文件 [cite: 351, 352]
!666.txt       # 虽然上面排除了所有 txt,但这个 666.txt 不排除 [cite: 353, 354]
test/          # 忽略整个 test 文件夹下的所有内容 [cite: 355, 356]
xxx/*.txt      # 忽略 xxx 目录中所有以 txt 结尾的文件,但不包括其子目录 [cite: 357, 358]
xxx/**/*.txt   # 忽略 xxx 目录中所有以 txt 结尾的文件,包括所有子目录 [cite: 359, 360]

三、 日志与回滚

1. 查看日志

想要理清各个分支和提交的关系,推荐使用这个组合命令:

bash 复制代码
git log --all --graph --oneline

这会以图形化、极其简洁的格式(仅显示 commit ID 前 7 位和描述)展示所有分支的提交历史,方便我们确认分支的分叉结构 。

2. 回滚 (Reset) 与反悔 (Reflog)

当我们想要回退到过去的某个版本时,可以执行硬重置:

复制代码
git reset --hard commitID

例如:git reset --hard bb64a15 命令执行后工作空间会直接恢复到那个提交时的状态,且之后的提交日志会消失 。

排坑要点: 如果你回滚后又后悔了怎么办?使用 git log 已经找不到未来的 ID 了。这时请使用 git reflog,它记录了你本地的所有操作记录(包括 reset 操作),你可以从中找到丢失的 commit ID,再次 reset 回去 。

四、 分支实战:创建、合并与冲突解决

分支就像树枝,可能一开始是同一根,但为了开发不同方向的项目(比如一个做 Web,一个做游戏服务端),就会分叉,在不同分支下修改文件内容是相互隔离的,默认主干是master分支 。

1. 分支基础操作

创建新分支git branch test,我这里的test为分支名

查看分支git branch,带 * 标记的即为当前所在分支

切换分支git checkout test,我这里的test为分支名

删除分支git branch -d test,我这里的test为分支名

2. 分支合并 (Merge) 与冲突修复

当我们在 test 分支上开发完毕(比如执行了 git commit -a -m 'Modify on test' ),需要将其合并到主干 master。

  1. 切换回合并目标分支:git checkout master 。

  2. 执行合并:git merge test 。

如果两个分支恰好修改了同一个文件的同一行代码,Git 会提示自动合并失败:

bash 复制代码
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.

这说明产生了冲突 。

如何手动解决冲突?

打开产生冲突的文件(如 hello.txt),会看到 Git 插入的标记 :

<<<<<<< HEAD 下方是你当前分支(master)的内容 。

======= 是分割线 。

>>>>>>> test 上方是待合并分支的内容 。

你需要人为判断保留哪些代码,删除多余的内容以及这三行特殊标记。修改完成后,执行提交来生成合并节点:

bash 复制代码
git commit -a -m 'Mrege on conflict'

此时通过 git log --all --graph --oneline 查看,会看到漂亮的 |\ 合并线,两分支的修改完美整合 。

五、 高阶玩法:变基 (Rebase) 与优选 (Cherry-pick)

除了 Merge 这种让分支回到主干的方式,我们还有其他整合代码的手段:

1. 变基 (Rebase)

变基是直接修改分支开始的位置 。例如我们希望将 test 变基到 master 上:

bash 复制代码
git rebase master

执行后,test 分支的起点会移动到 master 的最后一次提交位置,相当于同步了此前 master 分支的全部提交,让提交历史变成一条干净的直线,而不再有交叉的合并线 。

2. 优选 (Cherry-pick)

如果你并不想合并整个分支,只是垂涎隔壁分支刚刚提交的一个小功能(某一次单独的 commit),你可以使用优选操作:

bash 复制代码
git cherry-pick <commit id>

这可以单独将某一个特定的提交记录,精准地"复制"并作用于你当前所在的分支上 。


希望这份基于实操的详细整理对你有帮助!

相关推荐
无限进步_2 分钟前
【C++】巧用静态变量与构造函数:一种非常规的求和实现
开发语言·c++·git·算法·leetcode·github·visual studio
降临-max8 分钟前
Git 协同开发与冲突解决
笔记·git
高志小鹏鹏1 小时前
告别“修复 bug”:让别人一眼看懂你的 Commit
git·github·代码规范
Rabbit_QL6 小时前
【Git基础】03——Git 撤销与回退:改错了怎么办
大数据·git·elasticsearch
无限进步_6 小时前
【C++&string】寻找字符串中第一个唯一字符:两种经典解法详解
开发语言·c++·git·算法·github·哈希算法·visual studio
木下~learning6 小时前
零基础Git入门:Linux+Gitee实战指南
linux·git·gitee·github·虚拟机·版本控制·ubunt
zh_xuan6 小时前
修改远程仓库名以及和本地工程同步
git
读书札记20227 小时前
Git 配置用户名和邮箱 解决 fatal: unable to auto-detect email address 问题
git
程序员 沐阳8 小时前
Git 二分法精准定位 Bug:从原理到实战,让调试效率起飞
git·elasticsearch·bug
陳10308 小时前
Linux:入门开发工具--Git和GUN调试器
linux·运维·git