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