git 基础命令学习

前言:

git 仓库分本地代码和远程代码,本地代码分为两个区,一个是工作区,一个是暂存区。本地仓库,远程仓库。

.git用于版本控制

.gitgnore是忽略文件

一、基础工作

二、创建本地仓库

1、初始化仓库

git init 适用于本地仓库初始化,有完整的Git命令集,可以提交工作空间的代码和文件。;

git init --bare 适用于远程仓库初始化,默认没有工作空间

bash 复制代码
# 初始化仓库 带工作区
git init [项目名称]

# 初始化仓库 不带工作区
git init --bare
2、克隆存储库
复制代码
# git_url 为你的仓库的远程地址 
# [本地目录]非必填,不填写默认为当前目录
git clone <git_url>  [本地目录]

# clone 远程仓库指定的分支
git clone <git_url> -b <分支名称> 

三、git 基本操作

1、git status 检查本地发生变更的文件
复制代码
 git status
2、git add 准备本地文件提交至暂存区
复制代码
# 提交指定文件,file_name为文件名
git add <file_name>

# 提交所有变更的文件
git add .

# 会将所有已经追踪的文件(包括修改、删除)添加到暂存区,但不会添加新文件。适合用来提交已修改或删除的文件。
git add -u 

# 是 git add . 的更强大版本。它不仅会添加修改的文件,也会删除已被删除的文件并添加新文件。通常在更复杂的文件结构下使用。
git add -A

#允许逐个确认每一行改动是否添加到暂存区,适用于精确控制提交的内容。它提供交互式界面,便于选择要暂存的改动块。
git add -p 
3、git commit 将文件添加至本地仓库
复制代码
# 将所有暂存文件提交到本地仓库
git commit -m "commit message"

# 该命令直接将工作区文件提交至本地仓库,无需执行git add 命令
git commit -a 
4、git reset 取消提交至暂存区操作
复制代码
# 取消文件提交至暂存区的操作,保留文件更改
git reset <file_name>

# 将所有内容恢复到最后一次提交
git reset --hard
5、git diff 展示差异工作区和暂存区文件差异
复制代码
# 比较暂存区和工作区的文件差异 
# [file_name]为文件名,为非必填项,不填暂时所有
git diff [file_name]


# 显示暂存区和上一次提交(commit)的差异
git diff --cached [file]
git diff --staged [file]


#显示两次提交之间的差异
git diff [first-branch]...[second-branch]



# 查看已缓存的与未缓存的所有改动
git diff HEAD


#显示不同的摘要而非完整代码内容:
git diff --stat
6、git merge 分支合并操作
复制代码
# 从远端仓库提取数据并尝试合并到当前分支
git merge 

# 合并操作,历史提交记录智能累加,将<branch_name_A>分支的代码合并至当前分支
git merge <branch_name_A>
7、 git config 提交用户基础信息设置
复制代码
# 设置提交者账号
git config --global user.name "name"

# 设置提交者邮箱
$ git config --global user.email "email"

# 配置http代理地址
git config --global <url>

#配置http ssl校验开关
git config --global http.sslverify false

#配置https代理
git config --global https.proxy 'https://xxx.com:8080'

#配置https ssl校验开关
git config --global https.sslverify false

# 删除全局设置
git config --global --unset <entry-name>
8、git branch 分支操作
复制代码
# 列出所有分支
git branch

#列出所有本地分支和最新更新记录
git branch -v

#列出所有本地和远程分支
git branch -a

# 列出所有本地和远程分支及记录
git branch -av

# 查看本地所有分支和远程分支的绑定关系
git branch -vv

# 删除分支
git branch -d <branch_name>
9、git checkout 分支切换
复制代码
# 切换至已有的分支
git checkout <branch_name>

# 创建并切换分支
git checkout -b <branch_name>

# 创建并关联远程分支并切换
git checkout -b <branch_name> origin/<origin_branch_name>
10、git remote 管理远程仓库
复制代码
# 删除本地存在远程不存在的分支
git remote prune origin

# 列出当前仓库中已配置的远程仓库。
git remote

# 列出当前仓库中已配置的远程仓库,并显示它们的 URL。
git remote -v

# 添加一个新的远程仓库。指定一个远程仓库的名称和 URL,将其添加到当前仓库中。
git remote add <remote_name> <remote_url>

# 将已配置的远程仓库重命名。
git remote rename <old_name> <new_name>

# 从当前仓库中删除指定的远程仓库。
git remote remove <remote_name>

# 修改指定远程仓库的 URL。
git remote set-url <remote_name> <new_url>

# 显示指定远程仓库的详细信息,包括 URL 和跟踪分支。
git remote show <remote_name>

11、git tag 标记操作

复制代码
# 添加标记
git tag <tagname>

# 你执行 git tag -a 命令时,Git 会打开你的编辑器,让你写一句标签注解
git tag -a v1.0 

# 查看所有标记
git tag

# 推送标签至远程
git push origin <tagname>

# 推送所有标签至远程
git push origin --tags

# 删除标签
git tag -d <tagname>

# 删除远程标签
git push origin --delete <tagname>

# 查看标签信息
git show <tag_name>

..............................................................................................................................
使用场景:当项目达到重要阶段(如发布新版本)时,通过标签记录特定提交快照,便于追踪历史版本。例如,软件发布时标记 v1.0 标签,表示该版本为正式发布版本。 ‌

里程碑记录 : 开发过程中遇到重大变更或阶段性成果时,可创建标签(如 v1.0、v1.1),用于标识功能迭代或技术突破节点。 ‌

错误修正:当需要回退到历史版本修复问题时,可通过标签找到特定提交点,例如:
git checkout tags/v1.0  
11、git stash 暂时保存没有提交的代码,当前分支回到修改前的内容
复制代码
# 临时缓存本地修改代码,并且将当前分支代码回到之前的更改前的内容,切换其他分支修改完后切换回原来分支,拿取之前缓存的修改
git stash 
git checkout B
git checkou A
git stash pop 

# 存入
git stash 
# 添加注释存入
git stash save '注释'

# 取
git stash pop 
git stash apply(peek操作)
两者都会将当前分支的最后一次缓存的内容释放出来,但是apply操作下刚才的记录还存在list中,pop操作下刚才的记录不存在list中

# 删除堆栈顶部的更改
git stash drop
# 删除所有stash
git stash clear

# 查看
git stash list 
#查看索引和详细信息
git stash show
12、git log 查看历史提交记录
复制代码
# 显示当前分支的提交历史
git log

# 显示 branchA 上不在 branchB 上的提交
git log branchB..branchA

# 显示更改文件的提交,即使重命名
git log --follow [file]
13、git show 查看各类对象(提交、标签、树、Blob)详细信息,支持多种格式化选项展示具体内容。
复制代码
查看提交详情‌:默认显示最近提交(HEAD)的元数据(作者、时间、提交信息)及差异内容。‌‌

‌对象类型适配‌:
 标签:显示标签消息及引用对象。
 树:显示目录结构(类似git ls-tree --name-only)。
 Blob:直接输出文件原始内容。‌‌

‌常用选项与技巧‌:
‌--stat‌:显示文件修改统计(增删行数)。‌‌
‌--name-only‌:仅列出被修改的文件名。‌‌
‌--pretty=<格式>‌:指定日志格式(如oneline/short/email),默认medium‌‌

‌退出查看‌:按q键可立即退出git show的输出界面。‌‌

‌典型使用场景‌:
git show HEAD~2:查看上上次提交的详细信息。
git show v1.0 --stat:查看标签v1.0的变动文件统计。
git show abc123:README.md:查看指定提交中的文件内容。‌‌
14、git rm 删除文件
复制代码
# 从工作目录中删除文件并暂存删除
git rm <filename>

# 从版本控制中删除文件但在本地保留文件
git rm --cached <filename>
15、git mv 重命名文件
复制代码
# 更改文件名并准备提交
git mv <filename-orig> <filename-renamed>
16 、git fetch 将远端仓库更新至本地
复制代码
# 在不指定分支时,默认是master
git fetch origin

# 拉取远程分支至本地并创建B分支
git fetch origin A:B

git fetch相比git pull,相当于是从远程获取最新版本到本地,但不会自动合并
git pull = git fetch + git merge 
17、git pull 拉取当前分支下的远程代码并与本地自动合并
复制代码
# 将远程仓库的分支代码拉取并合并至本地 (前提是本地分支有关联远程分支)
git pull 

# 远程仓库名 默认都是origin,指定远程分支和本地分支
git pull origin 远程分支:本地分支
18、git push 将本地库中的代码提交至远程并合并
复制代码
# 推送代码
git push <远程仓库名> <远程分支名>:<本地分支名>

# 如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>

#如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:
git push --force origin master

#删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:

git push origin --delete master
19、git cherr-pick 选择特定提交并应用到当前分支
复制代码
# commit 是你commit时候生成的id记录
git cherry-pick <commit>

应用场景:当一个文件被多次修改,多次commit时候,可以使用该命令只选中某一个提交版本的部分代码应用到当前分支,而不是整个

20、 git rebase 变基操作

复制代码
让我们从大的方面开始:如果你在paul_branch上,并使用git rebase john_branch,Git 会去找 John 的分支和 Paul 的分支的共同祖先。然后把 Paul 分支的提交中引入的补丁,应用到 John 分支。

所以在这里,你用rebase把在一个分支,Paul 的分支上提交的修改,在另一个分支john_branch上重演(replay)。

!不同比对提醒:

1、 git 代码拉取 fetch 和pull的区别

fecth:拉取了远程分支,但是并不和本地工作区的代码合并,后期需要手动merge,可以使用 git diff origin/main(远程分支名) 命令,查看远程代码和本地的区别,在合并的时候可以更具需求选择性合并,避免出现大量合并冲突。

pull: 拉取了远程分支,并主动合并到本地工作区,若出现问题,需手动解决。是git fetch + git merge两条命令的结合

2、 分支合并操作

git 合并 merge 和rebase的区别

A:1-3-4

B:2-5

merge : A/B:任意一人merge,提交记录就成了 1-2-3-4-5

rebase: A : 线rebase,提交记录就成了 1-3-4-2'-5'

复制代码
# 将一个分支上的更改移到另一个分支之上,保持提交历史线性
git rebase

# 从远端仓库提取数据并尝试合并到当前分支
git merge 

# 合并操作,历史提交记录智能累加,将<branch_name_A>分支的代码合并至当前分支
git merge <branch_name_A>
相关推荐
一只游鱼2 小时前
大文件推送到git仓库
git·git lfs
2401_884810741 天前
git知识点
git
小牛itbull1 天前
从 Vercel 构建失败谈 Git 大小写敏感性问题:一个容易被忽视的跨平台陷阱
git
chainbees1 天前
Git账号配置 SSH 密钥
运维·git·ssh
Brian Xia2 天前
Lazygi - 让git操作不再困难
git
wdfk_prog2 天前
`git rm --cached`:如何让文件“脱离”版本控制
大数据·linux·c语言·笔记·git·学习·elasticsearch
Mark_Aussie2 天前
本地项目上传到Git仓库
git
骚饼3 天前
Git 命令配置别名、Git命令缩写(Mac版)
前端·git
SStone_TJ3 天前
【常用的git命令】
git