Git的基础了解

1、基础概念

1.1 版本控制系统

版本控制系统是一种用于记录文件变化、方便回溯和写作的工作,他主要用于跟踪文件的历史变更

  • 查看某文件的所有历史版本

  • 回退到任意历史版本

  • 对比不同版本之间的差异

  • 多人协作时比卖你覆盖彼此的修改

常见类型:

  • 本地版本控制:如RCS,只适用于单机使用

  • 集中式版本控制:如SVN,所有版本数据都存放在一个中央服务区上

  • 分布式版本控制:如Git,每个开发者本地都有完整的仓库历史

为什么要用版本控制系统

  • 防止误删或错误修改导致的数据丢失

  • 支持多人协作开发,减少冲突

  • 可以追溯每一次修改是谁做的、为什么改

  • 支持并行开发多个功能(分支)

  • 提高团队效率和代码质量

1.2 git是什么

git是目前最流程的分布式版本控制系统,由 Linux 内核创始人 Linus Torvalds 于 2005 年开发

git的特点:

特点描述
分布式每个开发者本地都有完整的仓库,不需要依赖中央服务器
快速高效几乎所有操作都在本地完成,速度很快
支持非线性开发可以轻松创建、合并、删除分支
数据完整性使用 SHA-1 哈希校验机制,确保数据不可篡改
开源免费社区活跃,文档丰富,支持多种平台

git 的核心思想:

  • 所有提交(commit)都是对文件快照的记录

  • 每次提交都会生成一个唯一的哈希值作为标识

  • Git 不只是记录差异,而是记录整个文件系统的状态

1.3 仓库是什么?

仓库是git存放项目文件和版本历史的地方,可以想象成一个“带有历史记录的文件夹”

创建仓库的方式有两种:

  • 初始化一个新的仓库(空项目)

    git init

    这会在当前目录下创建一个.git子目录,里面保存了所有的git元数据

  • 克隆一个已有的远程仓库(如github上的项目)

    git clone https://地址

    这会把远程仓库完整地复制到本地服务器上,包括所有的历史记录

2.安装git并配置用户信息

这一步是使用git的前提,安装完成后就可以进行版本控制操作了

2.1 下载与安装git

全程使用windows系统

官网下载地址:Git - 下载软件包

推荐使用默认设置安装即可

安装成功后会自带一个Git Bash工具,可以用来运行git命令

2.2 配置全局用户名和邮箱

git每次提交都会记录是谁做的修改,所以必须要配置用户名和邮箱

设置用户名

git config --global user.name "用户名"

设置邮箱:

git config --gloabl user.email "邮箱号"

--global表示这是全局配置,适用于当前用户的所有git仓胡,如果你只想为某个项目设置特定的用户名和邮箱,可以在对应仓库目录中去掉--global参数

查看当前配置信息:

git config --list

正常来说可以看到如下输出:

user.name=用户名
ser.email=邮箱号

2.3 可选配置(提升效率)

设置默认编辑器(如 VS Code)

git config --global core.editor "code --wait"

设置默认分支名称为 main(替代旧版的 master):

git config --global init.defaultBranch main

查看帮助文档:

git help config

小练习:验证安装和配置

  1. 打开终端或 Git Bash

  2. 输入以下命令:

    git --version
    git config --list

确保你能看到 Git 版本号以及你刚刚设置的用户名和邮箱。

3.创建或克隆仓库

在git中,仓库是存放项目代码和历史记录的地方。可以选择从零开始创建一个新的仓库,或者从远程服务器上克隆一个已有的仓库

3.1 创建新仓库(本地初始化)

git init

如果有一个全新的项目文件夹,并希望用git来管理他,可以使用git init来初始化一个空的git仓库

步骤:

#进入你的文件夹
cd your project
​
#初始化git仓库
git init

执行完后,git会在该目录下创建一个.git文件夹(隐藏的),里面保存了所有的git元数据

注意:此时这个仓库是空的,还没有任何提交内容

3.2 克隆远程仓库(已有项目)

如果需要参加一个已经存在的项目(比如github上的开源项目),通常会使用git clone命令来复制整个仓库到本地

git clone <仓库地址>

步骤:

git clone https://github.com/(具体的地址)

持的协议包括:

  • HTTPS(最常用)

  • SSH(推荐用于频繁推送操作)

  • Git 协议(只读)

3.3 查看当前仓库状态

完成创建或克隆后,建议查看一下当前仓库的状态,确认是否正常工作。

git status

输出示例:

On branch main
No commits yet
nothing to commit (create/copy files and use git add to track)

3.4 添加并提交第一个文件

# 创建一个测试文件
echo "Hello, Git!" > README.md
​
# 添加文件到暂存区
git add README.md
​
# 提交更改
git commit -m "Initial commit"

4. 基本操作

4.1 查看仓库状态 git status

显示当前工作目录和暂存区的状态,帮助了解哪些文件被修改了,哪些已添加但未提交,是否可以提交等

常见的输出解释:

  • ntracked files:新增但未添加到暂存区的文件。

  • Changes not staged for commit:已跟踪但有修改的文件,尚未添加到暂存区。

  • Changes to be committed:已添加到暂存区,等待提交。

这个命令建议每次操作前都运行一次

4.2 添加文件到暂存区 git add

将修改过的文件或新文件添加到“暂存区”,准备提交

添加某个特定的文件

git add file.tat

添加所有文件

git add .

.gitignore文件中定义的文件不会被加入

4.3提交更改 git commit

将暂存区中的更改正式保存为一个提交,并附上描述信息

git commit

这会打开默认编辑器让你输入提交信息(使用vs的话,则会在弹出窗口中输入)

提交信息规范建议:

  • 简明扼要

  • 使用动词开头,例如

    • Fix bug in login flow

    • Update dependencies

    • Add user profile page

4.4 查看提交历史 git log

查看项目的历史提交记录,包括提交哈希值、作者、时间、提交信息等

显示完整历史:

git log

简介显示一行一条

git log --online

查看某个文件的提交历史

git log file.txt

4.5 撤销添加(从暂存区移除) git reset

如果不小心条件了错误的文件到暂存区,可以用这个命令撤销

移除某个文件的暂存状态:

git reset file.txt

取消所有暂存内容:

git reset

4.6小结

命令功能
git status查看当前状态
git add <filename>添加单个文件到暂存区
git add .添加所有文件到暂存区
git commit -m "message"提交更改
git log查看提交历史
git reset取消暂存

5.分支管理

分支是git的核心功能之一,它可以让你在不影响代码的情况下开发新功能,修复bug或尝试新想法。

5.1什么是分支?

在git中,分支是一个指向特定提交的指针。默认情况下,git创建的第一个分支叫做main或master(取决于配置)

可以通过创建多个分支来并行开发不同的功能或版本,互不干扰

5.2查看当前分支:git branch

列出所有本地分支,并显示当前所在分支

git branch

输出示例:

* main
  feature/login
  bugfix/header

5.3创建新分支:git branch 分支名称

创建一个新的分支,但不会自动切换过去

示例:

git branch test

5.4切换分支:git checkout 分支名称

切换到指定的分支,工作目录内容会更新为该分支的最新状态

示例:

git checkout test

5.5创建并切换分支:git checkout -b 分支名称

一步完成创建+切换

git checkout -b test

这个命令等价于

git branch test
git checkout test

5.6 合并分支

将指定分支的内容合并到当前分支中

通常用于将功能分支合并会主分支

git checkout main
git merge test

这会把test分支上的所有更改合并到main分支上

注意:

  • 如果两个分支对同一个文件进行了修改,可能会出现冲突,需要手动解决

  • 解决后是由git add . 标记冲突已解决,在运行一次git commit完成合并

5.7删除分支:git branch -d 分支名称

删除已经合并的分支

git branch -d test

如果确定某个分支未被合并但仍然想删除,使用-D参数

git branch -D test

5.8推送远程分支

当你创建了一个本地分支并希望同步到远程仓库是,需要推送这个分支

git push origin test

之后其他的协作者及可以看到并拉取这个分支

5.9拉取远程分支

如果别人推送了一个新分支到远程仓库,可以将其拉取到本地

git fetch origin
git checkout -b test origin/test

这样就创建了一个与远程分支关联的本地分支

5.10小结

命令功能
git branch查看所有本地分支
git branch <name>创建新分支
git checkout <name>切换分支
git checkout -b <name>创建并切换分支
git merge <name>合并指定分支到当前分支
git branch -d <name>删除已合并的分支
git branch -D <name>强制删除分支
git push origin <name>推送本地分支到远程仓库
git checkout -b <local> origin/<remote>拉取远程分支

6.合并与冲突解决

在团队协作开发中,多个开发者可能会同时修改同一个文件。当你尝试将这些更改合并时,git可能无法自动判断该保留哪一部分的内容,此时就会产生冲突。

6.1合并分支:git merge

将一个分支的更改合并到当前所在的分支中

git checkout main
git merge test

这会把test分支上的所有更改合并到main分支上

6.2冲突产生的原因

当两个分支对同一个文件的统一部分进行了不同的修改,git就无法自动决定使用那一段代码,于是标记为冲突,需要手动解决。

6.3冲突的表现形式

当你执行git mergegit pull操作后,如果发生冲突,git会在冲突文件中标记如下内容

<<<<<<< HEAD
这是当前分支的内容
=======
这是要合并进来的分支内容
>>>>>>> branch-name

你需要手动选择保留哪些内容,并删除 <<<<<<<, =======, >>>>>>> 这些标记。

6.4解决冲突的步骤

  • 查看冲突文件

    git status

    输出中会列出有冲突的文件

  • 打开冲突文件,你会看到类似下面的标记

    <<<<<<< HEAD
    Hello, this is the main branch.
    =======
    Hello, this is the feature branch.
    >>>>>>> feature-branch
  • 手动编辑文件,选择保留的内容

    Hello, this is a merged message from both branches.
  • 保存文件并删除冲突标记

  • 将解决后的文件添加到暂存区

    git add <file>
  • 完成合并并提交

    git commit

    git会自动生成一个默认的提交信息,可以直接保存或修改

6.5查看冲突状态:git diff

如果不确定哪里发生了冲突,可以使用git diff查看详细差异

他结果中会高亮显示冲突区域

6.6 放弃合并(中止冲突处理)

如果在解决冲突的过程中发现有问题,或者想从头再来,可以中止合并操作

git merge --abort

这个命令会撤销正在进行的合并操作,并恢复到合并前的状态

6.7避免冲突的最佳时间

建议说明
经常拉取更新定期执行 git pull 获取最新代码,减少冲突发生的概率
小颗粒提交每次提交只做一件事,便于理解和回滚
明确沟通团队成员之间明确谁负责哪些文件,避免多人同时修改相同文件
使用 Pull Request在 GitHub/Gitee 上通过 PR 提交代码,方便审查和讨论后再合并

6.8小结

命令功能
git merge <branch>合并指定分支到当前分支
git status查看冲突文件
git diff查看冲突细节
git add <file>标记冲突已解决
git commit完成合并提交
git merge --abort中止当前合并操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值