【知识整理】Git 使用实践问题整理

问题1、fatal: refusing to merge unrelated histories

一、Git 的报错

fatal: refusing to merge unrelated histories

新建了一个仓库之后,把本地仓库进行关联提交、拉取的时候,出现了如下错误:

复制代码
fatal: 'master' does not appear to be a git repository
fatal: Could not read from remote repository.

二、解决方案

在你操作命令后面加 --allow-unrelated-histories

复制代码
git merge master --allow-unrelated-histories
$ git pull --allow-unrelated-histories
CONFLICT (add/add): Merge conflict in .gitignore
Auto-merging .gitignore
Automatic merge failed; fix conflicts and then commit the result.

这里由于我中间更换了代码仓库,然后又换回到原来的代码仓库,需要手动合并之后再进行 add、commit 即可。

如果你是git pull或者git push报fatal: refusing to merge unrelated histories

同理:

复制代码
git pull origin master --allow-unrelated-histories / git pull --allow-unrelated-histories

问题2、warning: in the working copy of '...', LF will be replaced by CRLF the next time Git touche

一、Git的报错

执行git add .的时候出现的警告"warning: in the working copy of '...', LF will be replaced by CRLF the next time Git touche"

新项目很多文件都是新建的,CR/LF是不同操作系统上使用的换行符:

CR(CarriageReturn回车**'\r'**):回到一行的开头,ASCII代码是13

LF(LineFeed换行'\n'):另起一行,ASCII代码是10

二、问题分析

Dos和Windows平台:

使用回车(CR)和换行(LF)两个字符来结束一行,回车+换行(CR+LF),即"\r\n";所以平时编写文件的回车符应该确切来说叫做回车换行符。Mac 和 Linux平台:只使用换行(LF)一个字符来结束一行,即"\n";许多 Windows 上的编辑器会悄悄把行尾的换行(LF)字符转换成回车(CR)和换行(LF),或在用户按下 Enter 键时,插入回车(CR)和换行(LF)两个字符。

三、解决问题

情况一:windows用户

Git 可以在你提交时自动地把回车(CR)和换行(LF)转换成换行(LF),而在检出代码时把换行(LF)转换成回车(CR)和换行(LF)。因为git 的 Windows 客户端基本都会默认设置 core.autocrlf=true

复制代码
#提交时转换为LF,检出时转换为CRLF:
git config --global core.autocrlf true

情况二:MAC用户

Git 在检出文件时不需要进行自动的转换。然而当一个以回车(CR)和换行(LF)作为行结束符的文件不小心被引入时,这是肯定想让 Git 修正。

所以,可以把 core.autocrlf 设置成 input 来告诉 Git 在提交时把回车和换行转换成换行,检出时不转换:(这样在 Windows 上的检出文件中会保留回车和换行,而在 Mac 和 Linux 上,以及版本库中会保留换行。)Linux 最好不要设置 core.autocrlf,因为这个配置算是为 Windows 平台定制;

复制代码
#提交时转换为LF,检出时不转换
$ git config --global core.autocrlf input

情况三:Windows 用户其他情况

如果你正在开发仅运行在 Windows 上的项目,可以设置 false 取消此功能,把回车保留在版本库中:

复制代码
#提交检出均不转换,你也可以在文件提交时进行safecrlf检查
git config --global core.autocrlf false

 
#拒绝提交包含混合换行符的文件
git config --global core.safecrlf true   
 
#允许提交包含混合换行符的文件
git config --global core.safecrlf false   
 
#提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn

Windows 上设置 core.autocrlf=false,仓库里也没有配置 .gitattributes,很容易引入 CRLF 或者混合换行符(Mixed Line Endings,一个文件里既有 LF 又有CRLF)到版本库,这样就可能产生各种奇怪的问题。

问题三、git commit -m 编辑后发现需要更改

在Git的提交命令git commit -m "message"中,-m选项用于指定提交信息。如果想要修改已经输入的提交信息并将其应用到最新的commit上

使用下面的操作流程:

1、首先,通过运行git log或者git reflog来查看当前分支的提交记录,确认需要修改的commit所对应的SHA值(commit ID)。

2、然后,使用git rebase -i <commit-id>命令进行交互式rebase操作,将<commit-id>替换为目标commit的ID。这会打开一个文本编辑器,显示了从该commit之后的所有commits列表。

3、在编辑器中,将需要修改的commit所在行的pick关键字改成edit,保存并关闭编辑器。

4、Git会自动切换到被修改的commit,此时可以使用git commit --amend命令重新编辑提交信息。

5、完成编辑后,再次运行git rebase --continue命令,将更改应用到原始commit上。

6、若还有其他未处理的commit,则按照相同的步骤继续进行rebase操作直到结束。

7、最后,使用git push origin <branch-name> --force命令将修改后的commit推送到远程仓库,注意加上--force参数以覆盖原有的commit。

相关推荐
Georgeviewer2 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
腻害兔4 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
zzqssliu4 小时前
煤炉自动代拍系统的队列设计与超时控制机制
git·github
GIR1234 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
一支绝命钩4 小时前
FPGA工程Git常用操作手册
git
南讯股份Nascent5 小时前
洽洽全域会员项目启动会圆满召开
大数据·人工智能
大郭鹏宇5 小时前
基于 LangGraph 构建智能分诊系统(一):项目概述与环境搭建
大数据·人工智能·microsoft·langchain
不搞学术柒柒8 小时前
Git新功能完整开发提交流程
git
阿里云大数据AI技术9 小时前
阿里云 ES AI 引擎版:面向 Agent 场景,为亿级租户、千亿规模向量设计的搜索引擎
人工智能·elasticsearch·agent
天天爱吃肉82189 小时前
【电源拆解:跟着问答逐一认识开关适配器PCB元器件】
大数据·人工智能·python·功能测试·嵌入式硬件·汽车