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工作流程
核心区域(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 push
、git 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前先进行本地的合并
(3)合并冲突
当两个分支对同一个文件进行了不同修改,且这两个修改无法被 Git 自动合并时,会产生冲突。
merge冲突需要手动解决。
报错如图:
此时git会告诉我们发送merge冲突的文件,我们需要手动修改保留需要的内容,然后手动commit提交。
commit之后才算merge成功
(4)合并模式
当没有发生合并冲突的时候,我们合并分支默认会使用Fast-Forward模式
1.Fast-Forward模式
当基于当前分支创建的一个分支提交的时候,当前分支没有新的提交,合并之后当前分支就会直接指向新分支的提交。
ff模式的历史记录会呈现为一条直线,没有分支合并的痕迹
2.no-ff模式
就是非Fast-Forward模式
git merge --no-ff 分支名
强制创建一个新的合并提交。
当原本会触发快进合并时,使用 --no-ff
可以强制生成一个合并节点,清晰保留分支的开发轨迹。
(5)追踪分支
在 Git 中,“追踪分支”(Tracking Branch)是指与远程分支建立关联关系的本地分支。这种关联能简化 Git 操作,让 Git 自动知道该与哪个远程分支进行同步(如 git pull
或 git 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)的快照,主要作用包括:
-
标记重要版本
最常见的用途是标记软件的发布版本(如v1.0.0
、v2.1.3
),方便后续快速定位和回溯到某个稳定版本。例如,发布正式版时创建标签,后续如需修复该版本的问题,可基于此标签创建分支。 -
简化版本引用
标签可以替代冗长的 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 对象引用。
(2)撤销修改
撤销的目的就是不影响远程仓库的代码;所以撤销都是建立在push前的
工作区修改撤销:
git checkout -- <文件名> # 丢弃工作区的修改(未add到暂存区)git restore <文件名>
不同状态的撤销方案:
git reset HEAD
2. 再撤销工作区:
git checkout --
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就代表这个指令