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

问题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

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

问题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 使用实践问题整理-LMLPHP

问题三、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。

03-01 11:02