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


    问题1、fatal: refusing to merge unrelated histories

    一、Git 的报错


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

    1. fatal: 'master' does not appear to be a git repository
    2. fatal: Could not read from remote repository.

    二、解决方案


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

    1. git merge master --allow-unrelated-histories
    2. $ git pull --allow-unrelated-histories
    3. CONFLICT (add/add): Merge conflict in .gitignore
    4. Auto-merging .gitignore
    5. 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

    1. #提交时转换为LF,检出时转换为CRLF:
    2. git config --global core.autocrlf true

    情况二:MAC用户

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

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

    1. #提交时转换为LF,检出时不转换
    2. $ git config --global core.autocrlf input

    情况三:Windows 用户其他情况

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

    1. #提交检出均不转换,你也可以在文件提交时进行safecrlf检查
    2. git config --global core.autocrlf false
    3. #拒绝提交包含混合换行符的文件
    4. git config --global core.safecrlf true
    5. #允许提交包含混合换行符的文件
    6. git config --global core.safecrlf false
    7. #提交包含混合换行符的文件时给出警告
    8. 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 命令进行交互式rebase操作,将替换为目标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 --force命令将修改后的commit推送到远程仓库,注意加上--force参数以覆盖原有的commit。

  • 相关阅读:
    免费生成证书
    Java全栈解密:从JVM内存管理到Spring框架,揭秘垃圾回收、类加载机制与Web开发精髓的全方位旅程
    Windows下安装Miniconda及配置和简单使用
    jmeter入门:接口压力测试全解析
    数学建模国赛/美赛常见赛题类型及建模方案(纯干货)
    Flink Yarn Per Job - Yarn应用
    9. CSP-Cache Server Page
    vscode 更新仓库新建的分支
    Oracle中的Rollup 使用方法
    找到 K 个最接近的元素
  • 原文地址:https://blog.csdn.net/tjls2008/article/details/136380202