Git分布式版本控制工具

一、工作流程

二、常用指令

1、配置git

  1. 配置环境变量

cmd打开命令行,输入git查看是否配置成功。

  1. 设置用户名和邮箱

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

git config --global user.email "邮箱"

  1. 查看用户名和邮箱

git config --global user.name

git config --global user.email

  1. 查看所有的配置信息

git config --list

2、基础命令

1、 git add

将工作区修改的的一个或多个文件提交到暂存区

git add 单个文件名|通配符

2、git commit

提交暂存区内容到本地仓库的当前分支

git commit -m '注释内容'

3、git status:查看修改的状态
git status 主要显示:

  1. 当前分支及与远程分支的关系。
  2. 已暂存的更改(即将提交的更改)。
  3. 未暂存的更改(已修改但未 git add)。
  4. 未跟踪的文件(新文件)。
  5. 合并冲突(如果有)

3、bash乱码和git status乱码

1、git status乱码

原因:

在默认设置下,中文文件名在工作区状态输出,中文名不能正确显示,而是显示为八进制的字符编码。

解决办法:

将git配置文件 core.quotepath项设置为false。quotepath表示引用路径,加上--global表示全局配置

java 复制代码
git config --global core.quotepath false

2、bash命令乱码

${git_home}/etc/bash.bashrc 文件最后加入下面两行

java 复制代码
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

三、常用操作

1、创建本地厂库

  1. 在本地创建一个空目录
  2. 进入目录,输入指令git init进行初始化
  3. 创建成功出现.git目录

2、git log 查看日志

命令形式:git log [option] options

  • --all 显示所有分支
  • --pretty=oneline 将提交信息显示为一行
  • --abbrev-commit 使得输出的commitId更简短
  • --graph 以图的形式显示

3、git reset --hard commitID版本回退

版本切换 git reset --hard commitID

commitID 可以使用 git log 查看

如何查看已经删除的记录?

git reflog 这个指令可以看到已经删除的提交记录

4、添加文件到忽略列表

创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式 。

每行一个忽略项

java 复制代码
# 忽略所有 .log 文件
*.log
# 忽略特定文件
secret.txt
# 忽略目录(包括其子目录)
node_modules/
dist/
# 忽略特定扩展名的文件(如 .tmp)
*.tmp
# 不忽略某个特定文件(即使匹配前面的规则)
!important.log
# 注释以 # 开头

如果文件已经被 Git 跟踪(之前提交过),需要先移除 Git 的缓存:

java 复制代码
git rm -r --cached .  # 清除所有缓存,或者指定要清除的缓存
git add .             # 重新添加文件
git commit -m "忽略某些文件"

验证 .gitignore 是否生效

java 复制代码
git status --ignored  # 查看被忽略的文件

5、git rm --cached 和 git rm区别

四、分支和冲突的处理

1、分支

  1. git branch:查看本地分支
  2. git branch 分支名 :创建分支
  3. git checkout 分支名:切换分支
  4. git checkout -b 分支名:切换到一个不存在的分支(创建并切换)
  5. git merge 分支名称:将某分支合并到当前的分支
  6. git branch -d b1 删除分支时,需要做各种检查
  7. git branch -D b1 不做任何检查,强制删除

2、解决冲突

当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解

决冲突,解决冲突步骤如下:

  1. 处理文件中冲突的地方
  2. 将解决完冲突的文件加入暂存区(add)
  3. 提交到仓库(commit)

3、在一个分支上修改文件内容,切换到另一个分支时出现的问题

在idea里面,会直接将该分支的修改带到另一个分支上。

在命令行:

要想直接切换,可以在当前的分支使用git stash命令。

git stash : 临时保存当前工作目录和暂存区的修改,以便切换分支或处理其他任务,而无需提交未完成的更改。

切换到master分支后(做一些其他操作...),再切换回来,如何恢复文件的内容,可以使用git stash pop

恢复最近暂存的修改(stash)并删除该 stash 记录的命令。它是 git stash apply + git stash drop 的组合操作。

如果git stash pop 时当前分支的文件与stash 内容冲突,Git 会报错,并保留 stash(不会自动删除)。

冲突文件会包含冲突标记(<<<<<<<, =======, >>>>>>>)

第一种解决方法是:

git restore file.txt 丢弃对 file.txt 的修改,再去git stash pop

第二种解决办法是:

可以先git commit,再去git stash pop

不难发现就是将每次的stash操作加到了栈中,每次 git stash pop时,弹出一个,判断有没有冲突。

常见的带参数的git stash命令
命令 作用
git stash 保存当前未提交的修改(工作区和暂存区)到 stash 栈
git stash push 同上,支持更多参数(如 -u 包含未跟踪文件)
git stash list 查看所有 stash 记录(显示 stash@{n} 格式的列表)
git stash apply 恢复最新的 stash(不删除记录,默认 stash@{0}
git stash pop 恢复最新的 stash 并删除记录 (默认 stash@{0}
git stash drop 删除指定的 stash(如 git stash drop stash@{1},不指定则删除最新的)
git stash clear 清空所有 stash 记录(不可逆!)
git stash show 显示最新 stash 的改动概览(加 -p 查看完整 diff)
git stash branch <名> 基于 stash 内容创建新分支并自动 pop

五、开发中分支的使用流程

在开发中一般就是先git pull拉取远端的代码,再git commit提交到本地仓库,再git pull拉取一下(推荐非强制),在git push推送到远端仓库中去。

分为几个分支:

master(生产)分支 线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;

develop (开发)分支 是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线 要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。 feature/xxxx分支 从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完 成后合并到develop分支。

hotfix/xxxx分支, 从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、 develop分支。

还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。

六、gitee的使用

1、添加远程仓库

git remote add <远端名称> <仓库路径></font>

远端名称默认是origin

2、查看远程仓库

git remote

3、推送到远程仓库

git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名] ]

-f 表示强制覆盖

--set-upstream推送到远端的同时并且建立起和远端分支的关联关系。

如果已经建立联系,可以直接git push

4、本地分支与远程分支的关联关系

git branch -vv

5、从远程仓库克隆

git clone <仓库路径> [本地目录]

6、从远程仓库中抓取

抓取命令:git fetch [remote name] [branch name] </font>

抓取指令就是将仓库里的更新都抓取到本地,不会进行合并,如果不指定远端名称和分支名,则抓取所有分支。

7、从远程仓库中抓取

拉取命令:git pull [remote name] [branch name]

拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge,如果不指定远端名称和分支名,则抓取所有并更新当前分支。

相关推荐
我是黄骨鱼2 小时前
快速idea本地和推送到远程仓库
git
计算机视觉小刘2 小时前
DISTRIBUTED PRIORITIZED EXPERIENCE REPLAY(分布式优先级体验回放)论文阅读
论文阅读·分布式·强化学习
掘金-我是哪吒2 小时前
分布式微服务系统架构第107集:Netty开发,模拟报文生成器代码
分布式·微服务·云原生·架构
程序猿阿伟8 小时前
《分布式软总线牵手云服务,拓展应用新维度》
分布式
掘金-我是哪吒10 小时前
分布式微服务系统架构第102集:JVM调优支撑高并发、低延迟、高稳定性场景
jvm·分布式·微服务·架构·系统架构
王鑫的博客88610 小时前
本地git操作
c语言·git
不要不开心了11 小时前
sparkcore编程算子
pytorch·分布式·算法·pygame
java1234_小锋11 小时前
Zookeeper的典型应用场景?
分布式·zookeeper·云原生
乌旭12 小时前
从Ampere到Hopper:GPU架构演进对AI模型训练的颠覆性影响
人工智能·pytorch·分布式·深度学习·机器学习·ai·gpu算力
魔道不误砍柴功12 小时前
SpringCloud Alibaba 之分布式全局事务 Seata 原理分析
分布式·spring·spring cloud