> 技术文档 > Git从入门到掌握_git操作

Git从入门到掌握_git操作


文章目录

  • Git工作流程
  • 一、Git本地操作
    • (1)初始化本地仓库
    • (2)流程指令
  • 二、Git远程操作
    • (1)克隆仓库
    • (2)查看远程仓库
    • (3)推送与拉取
  • 三、Git基本指令
    • (1)查看基本状态信息
    • (2)查看提交日志
    • (3)查看文件差异
    • (4)保存工作区内容
  • 四、分支操作
    • (1)基本指令
    • (2)分支合并流程
    • (3)合并冲突
    • (4)合并模式
    • (5)追踪分支
  • 五、标签操作
    • (1)基本指令
    • (2)远程指令
  • 六、版本回退操作
    • (1)版本回退
    • (2)撤销修改
  • 七、配置操作
    • (1)配置作者信息
    • (2)为指令配置别名

Git工作流程

Git从入门到掌握_git操作
核心区域(4 大存储区)

  • 工作区:实际编写、修改代码的地方,是本地能直接操作文件的 “工作目录”。
  • 暂存区:临时存放待提交代码的 “中转站”,可理解为 “准备提交的代码集合” ,标记哪些变动要进入版本库。
  • 本地仓库:存储代码历史版本的 “数据库”,记录每次 commit(提交)的完整版本信息,在本地电脑里。
  • 远程仓库:托管在服务器上的代码仓库(比如 GitHub/Gitee),团队共享、协作的中心,可多人推送 / 拉取代码。

一、Git本地操作

(1)初始化本地仓库

右键进入需要加入git仓库的文件夹

#输入以获取本地仓库git init

如果创建成功就会多出一个.git文件夹

(2)流程指令

1.添加到暂存区

git add file1 file2 ....git add . #将所有改动都添加到暂存区

2.提交到本地仓库

git commit -m \"注释\"

二、Git远程操作

(1)克隆仓库

git clone 克隆地址

不允许在以及存在.git文件夹的目录下克隆

1.https协议克隆

​ 使用 HTTPS 协议克隆 Git 仓库是最常见的仓库克隆仓库获取方式之一,它通过 HTTPS 协议建立连接,操作简单且兼容性好(几乎所有网络环境都支持)。

git clone https://gitee.com/gitlife/pbrushRepo.git

适合场景:临时克隆仓库、网络环境限制较多、不想配置 SSH 密钥的情况。

2.SSH协议克隆

​ SSH协议克隆,后续与远程仓库的交互(如 git pushgit pull)将自动通过 SSH 认证,无需重复输入密码(若生成密钥时设置了密码,则首次操作需要输入密钥密码)。

(1)检查是否已有 SSH 密钥
首先查看本地是否已生成 SSH 密钥对(公钥和私钥),在终端执行:

ls ~/.ssh

若能看到 id_rsa(私钥)和 id_rsa.pub(公钥),说明已有密钥,可直接使用;否则需要新建。

(2)生成 SSH 密钥(若没有)
执行以下命令生成密钥(邮箱替换为你的 Git 账户邮箱):

ssh-keygen -t rsa -C \"your_email@example.com\"

按提示操作(可直接回车使用默认路径和空密码,或设置密码提高安全性)。

  • rsa是一种加密方法,ed25519算法在安全性、性能和资源占用上表现更优,但在一些对兼容性要求极高的老旧环境中,RSA 仍然是可靠的选择
  • -C为注释,仅用于标识,不影响密钥的功能,是否填写、填写什么内容完全由你决定

(3)将公钥添加到远程 Git 平台

cat ~/.ssh/id_rsa.pub

​ 登录你的 Git 平台,进入个人设置中的 “SSH 密钥” 页面,粘贴复制的公钥内容并保存(标题可自定义)。

多个人配置对应人的公钥。

(4)使用 SSH 链接克隆仓库
在远程仓库页面获取 SSH 格式的克隆链接(通常以 git@ 开头,如 git@github.com:username/repo.git),然后执行克隆命令:

git clone git@gitee.com:gitlife/pbrushRepo.git

(2)查看远程仓库

git remote

(3)推送与拉取

推送

git push origin master:master #远程分支如果相同是可以省略只写一个master的# origin表示远程仓库#master:master 本地分支:远程分支 

拉取

git pull origin master# origin表示远程仓库#master:master 远程分支:本地分支 

三、Git基本指令

(1)查看基本状态信息

查看工作目录和暂存区的状态

git status

(2)查看提交日志

日志记录commit对象的哈希值、作者信息、提交日期、提交消息

git log

git log后接的属性:

--pretty=oneline #打印一行--abbrev-commit #作用:简化提交哈希值的显示。--graph #直观展示分支之间的关系(如合并、分叉等)。

(3)查看文件差异

显示暂存区和工作区的差异,显示格式是Unix通用的diff格式。

#常用git diff test.txt #比较工作区与暂存区的该文件git diff <提交哈希1> <提交哈希2> #比较两个提交git diff <提交哈希> -- file.txt #比较某个文件的历史版本,填HEAD就是与本地仓库的比较

输出结果:

diff --git a/test.txt b/test.txtindex 789f9a0..d32f2e1 100644--- a/test.txt+++ b/test.txt@@ -1,3 +1,4 @@ hello git this is a test file-旧内容+新内容+新增一行
1. diff --git a/test.txt b/test.txta/test.txt:表示 “源文件”(修改前的版本,通常是暂存区或版本库中的文件)。b/test.txt:表示 “目标文件”(修改后的版本,通常是工作区中的文件)。文件名前的 a/ 和 b/ 是 Git 为区分两个版本添加的前缀,实际文件路径是 test.txt。2. index 789f9a0..d32f2e1 100644作用:记录文件的哈希值和权限信息。789f9a0:源文件(a/test.txt)的 blob 对象哈希值(修改前的版本)。d32f2e1:目标文件(b/test.txt)的 blob 对象哈希值(修改后的版本)。100644:文件的权限标识(表示这是一个普通可读文件,与 Git 中的文件类型对应)。3. --- a/test.txt 和 +++ b/test.txt作用:明确对比的两个文件版本。--- a/test.txt:表示 “源文件开始”(修改前)。+++ b/test.txt:表示 “目标文件开始”(修改后)。4. @@ -1,3 +1,4 @@作用:标记差异所在的行数范围(“差异块标记”)。-1,3:表示源文件(修改前)中,差异涉及从第 1 行开始的 3 行。+1,4:表示目标文件(修改后)中,差异涉及从第 1 行开始的 4 行。整体含义:修改前的 3 行,在修改后变成了 4 行(即有新增或删除)。5. 具体差异内容作用:展示具体的内容变化,通过前缀符号区分:无前缀:表示 “未修改的行”(用于上下文参考,方便定位差异位置)。- 开头:表示 “删除的行”(源文件有,目标文件无)。+ 开头:表示 “新增的行”(源文件无,目标文件有)。

(4)保存工作区内容

当我们切换分支且工作区内容修改了的时候:

#保存工作区中的内容git stash#查看stash中保存的内容git stash list#从stash中恢复内容git stash pop

只能保存被git追踪的文件。如果是新建文件是无法保存的。

四、分支操作

​ 在版本控制系统中,分支的核心作用是通过隔离不同开发任务(如功能开发、bug 修复、实验性尝试等),支持多人并行工作,同时保护核心代码(如主分支)的稳定性。它既能让各开发任务互不干扰、独立推进,又便于追踪历史变更、管理多版本,是团队协作和高效版本控制的基础。

当远程创建一个新的分支的时候,我们需要使用git pull拉取新的分支情况

git pull #拉取远程仓库内容:1.包括对应分支文件内容 2.远程仓库分支情况

(1)基本指令

1.查看分支

HEAD指向的分支就是当前正在工作的分支。

git branch #查看本地分支git branch -r #查看远程仓库分支git branch -a #查看远程和本地分支

2.创建分支

git branch 分支名git branch -b 分支名 #创建并切换到新分支

3.切换分支

git checkout 分支名

实质是改变HEAD的指向

4.删除分支

git branch -d 分支名 #只能在别的分支上删除待删除分支git branch -D 分支名 #当分支上提交过,就需要用大写D删除

5.合并操作

git merge <分支名> #将与当前分支合并

(2)分支合并流程

思路是保证master上的代码是最新的,然后再将dev分支合并到master上,最后删除无用的dev分支。

1.本地合并

#1.切换到master分支拉取最新代码,并保证代码最新git checkout mastergit pull#2.将最新的master合并到dev,保证内容为最新状态git checkout devgit merge master#3.合并master并推送git checkout mastergit merge devgit push

步骤 1 和 2 的作用

  • 切换到master并拉取最新代码:确保本地master分支与远程仓库保持一致,避免后续合并时出现旧版本冲突。
  • 切换到dev并合并master:让开发分支dev先吸收master的最新改动,提前解决可能的冲突,避免后续将dev合并回master时出现大规模冲突。

这两步是本地确保代码同步的必要操作,目的是在提交前,尽可能减少分支间的差异和冲突

2.使用PR(Pull Request)

​ 上述流程的步骤1,2是确保代码同步的必要操作,建议再本地依旧先进行步骤1,2再PR。

PR只是相当于将步骤3最后一步push给流程化了,使得代码检查更加严格。

PR不会将你本地的master和dev合并,所以提交PR前先进行本地的合并

Git从入门到掌握_git操作

(3)合并冲突

当两个分支对同一个文件进行了不同修改,且这两个修改无法被 Git 自动合并时,会产生冲突。

merge冲突需要手动解决。

报错如图:

Git从入门到掌握_git操作

此时git会告诉我们发送merge冲突的文件,我们需要手动修改保留需要的内容,然后手动commit提交。

commit之后才算merge成功

(4)合并模式

当没有发生合并冲突的时候,我们合并分支默认会使用Fast-Forward模式

1.Fast-Forward模式

​ 当基于当前分支创建的一个分支提交的时候,当前分支没有新的提交,合并之后当前分支就会直接指向新分支的提交。

ff模式的历史记录会呈现为一条直线,没有分支合并的痕迹

Git从入门到掌握_git操作

2.no-ff模式

就是非Fast-Forward模式

git merge --no-ff 分支名

强制创建一个新的合并提交。

当原本会触发快进合并时,使用 --no-ff 可以强制生成一个合并节点,清晰保留分支的开发轨迹。

Git从入门到掌握_git操作
Git从入门到掌握_git操作

(5)追踪分支

​ 在 Git 中,“追踪分支”(Tracking Branch)是指与远程分支建立关联关系的本地分支。这种关联能简化 Git 操作,让 Git 自动知道该与哪个远程分支进行同步(如 git pullgit push 时)。

跟踪分支的配置:

  • 查看本地分支与远程分支的连接情况
git branch -vv
  • 创建远程连接
#1.有远程分支,无本地分支git checkout -b dev origin/dev #创建本地分支的同时与远程分支连接#2.有远程分支,有本地分支git branch --set-upstream-to=origin/dev dev#将远程仓库dev和本地仓库dev建立连接#3.无远程分支,有本地分支#远程创建分支,但不自动建立联系git push origin dev #远程创建分支,自动建立联系git push -u origin devgit push --set-upstream origin dev
  • 删除远程分支
#删除远程分支需要使用专门的命令格式:git push origin --delete dev#或者简写为:git push origin :dev
  • 删除后远程分支与本地分支同步
#显示远程仓库情况git remote show origin#删除本地依旧显示已被远程仓库删除的分支git remote prune origin

建立连接后git pull/push可以直接使用:

git pullgit push

五、标签操作

在 Git 版本控制中,tag(标签) 是用于标记代码仓库中特定提交(commit)的快照,主要作用包括:

  1. 标记重要版本
    最常见的用途是标记软件的发布版本(如 v1.0.0v2.1.3),方便后续快速定位和回溯到某个稳定版本。例如,发布正式版时创建标签,后续如需修复该版本的问题,可基于此标签创建分支。

  2. 简化版本引用
    标签可以替代冗长的 commit ID 来指代特定版本,使用更直观。例如,用 git checkout v1.0 比用 git checkout a1b2c3d 更易记。

(1)基本指令

1.查看标签

git tag#查看所有标签git show v1.0 #查看v1.0的信息详细

2.创建标签

git tag v1.0 #给最新一次提交打上标签git tag v1.0 commit的ID #给对应id的提交打上标签git tag -a v1.0 -m \"信息\" commit的id #给对应id的提交打标签并写描述

3.删除标签

git tag -d v1.0 #删除标签

(2)远程指令

1.推送标签

git push origin v1.0 #推送1.0标签到远程仓库git push origin --tags #推送所有标签到远程仓库git push origin :v1.0 #删除远程标签;推荐先在本地删除,保持一致性

2.拉取标签

git fetch origin v1.0 #拉取指定的标签git fetch --tags # 拉取所有远程标签

六、版本回退操作

(1)版本回退

#回退到对应版本git reset --模式属性 <目标版本>

1.模式属性:

--soft:仅移动版本库指针,暂存区和工作区不变--mixed(默认):移动版本库指针,重置暂存区,工作区不变--hard:移动版本库指针,同时重置暂存区和工作区(**会丢失未提交的修改,谨慎使用**)

2.获取目标版本

(1)查看日志获取正确的commit id

git log#取commit id的前6~8位即可git reflog #可以查看所有的commit提交,包括被删除的

(2)使用HEAD相对引用:

  • HEAD 表示当前版本;
  • HEAD^ 表示上一个版本(^ 数量表示回退步数,如 HEAD^^ 表示上两个版本)
  • HEAD~n 表示回退 n 个版本(如 HEAD~1 与HEAD^都表示上个版本)

3.版本回退原理

版本回退的本质是修改当前分支(如 master)指向的 commit 对象引用。

Git从入门到掌握_git操作

(2)撤销修改

撤销的目的就是不影响远程仓库的代码;所以撤销都是建立在push前的

工作区修改撤销:

git checkout -- <文件名> # 丢弃工作区的修改(未add到暂存区)git restore <文件名>

不同状态的撤销方案:

工作区 暂存区 版本库 解决方式 已修改 未暂存 未提交 git restore 已修改 已暂存 未提交 1. 先回退暂存:git reset HEAD
2. 再撤销工作区:git checkout -- 已修改 已暂存 已提交 1. 直接回退版本:git reset --hard HEAD^(彻底删除最近一次提交)

当版本库提交了,就表示一个新的版本创建了,此时撤销操作就是回退包括工作区的整个版本了

包括工作区:–hard,上个版本用HEAD^

  • 注意:git checkout -- 中的 -- 用于区分文件名和分支名,避免歧义

七、配置操作

(1)配置作者信息

安装git后,首先需要配置用户名和邮箱地址。因为每次提交都需要使用这些信息;

#1.设置用户信息git config --global user.name=\"pbrush\"git config --global user.email=\"pbrush@qq.com\"#2.删除配置:git config --unset user.name#3.查看配置信息git config --global user.name #查看指定属性git config --global -l#查看所有属性

当我们不加–global进行配置的时候,配置的是本仓库配置,配置的内容会覆盖掉全局的配置。

–local表示本地,–global表示全局

(2)为指令配置别名

文件内配置

1.打开用户目录,创建.bashrc文件

2.打开.bashrc文件输入

#用于输出git提交日志alias git-log=\'git log --pretty=oneline --all --graph --abbrev-commit\'#用于输出当前目录所有文件及基本信息alias ll=\'ls -al\'

3.打开GitBash执行

source ~/.bashrc

指令配置

git config --global alias.别名 \'对应指令\'
git config --global alis.lpa \'log --pretty=oneline --abbrev-commit\'#将每个提交压缩显示在一行,缩短提交哈希的长度的这个长指令取别名为lpa 之后输入git lpa就代表这个指令