【知识整理】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。

相关推荐
PersistJiao22 分钟前
在 Spark RDD 中,sortBy 和 top 算子的各自适用场景
大数据·spark·top·sortby
2301_8112743134 分钟前
大数据基于Spring Boot的化妆品推荐系统的设计与实现
大数据·spring boot·后端
Yz987642 分钟前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
青云交42 分钟前
大数据新视界 -- 大数据大厂之 Hive 数据导入:多源数据集成的策略与实战(上)(3/ 30)
大数据·数据清洗·电商数据·数据整合·hive 数据导入·多源数据·影视娱乐数据
我不是程序猿儿43 分钟前
【GIT】TortoiseGit的变基(Rebase)操作
git
武子康1 小时前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs
武子康1 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
时差9531 小时前
Flink Standalone集群模式安装部署
大数据·分布式·flink·部署
锵锵锵锵~蒋1 小时前
实时数据开发 | 怎么通俗理解Flink容错机制,提到的checkpoint、barrier、Savepoint、sink都是什么
大数据·数据仓库·flink·实时数据开发
二进制_博客1 小时前
Flink学习连载文章4-flink中的各种转换操作
大数据·学习·flink