git上传文件时报错及解决方案

使用git的过程中,难免会遇到一些报错,以下总结一些我遇到的坑,以便自己再次遇到时可快速解决,希望对大家也有帮助:

 

--- 关于git提示 "warning: LF will be replaced by CRLF" 的警告:

格式化与多余的空白字符,特别是在跨平台情况下,有时候是一个令人发指的问题。由于编辑器的不同或者文件行尾的换行符在 Windows 下被替换了,一些细微的空格变化会不经意地混入提交,造成麻烦。虽然这是小问题,但它会极大地扰乱跨平台协作。
其实,这是因为在文本处理中,CRCarriageReturn),LFLineFeed),CR/LF是不同操作系统上使用的换行符,具体如下:

换行符‘\n’和回车符‘\r’

  • 回车符就是回到一行的开头,用符号r表示,十进制ASCII代码是13,十六进制代码为0x0D,回车(return);
  • 换行符就是另起一行,用n符号表示,ASCII代码是10,十六制为0x0A, 换行(newline)。

所以我们平时编写文件的回车符应该确切来说叫做回车换行符。

应用情况

  • Dos和Windows平台: 使用回车(CR)和换行(LF)两个字符来结束一行,回车+换行(CR+LF),即“\r\n”;
  • Mac 和 Linux平台:只使用换行(LF)一个字符来结束一行,即“\n”;
  • 最早Mac每行结尾是回车CR 即'\r',后mac os x 也投奔了 unix。

许多 Windows 上的编辑器会悄悄把行尾的换行(LF)字符转换成回车(CR)和换行(LF),或在用户按下 Enter 键时,插入回车(CR)和换行(LF)两个字符。

影响:

  • 一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;
  • 而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
  • Linux保存的文件在windows上用记事本看的话会出现黑点。

这些问题都可以通过一定方式进行转换统一,例如,在linux下,命令unix2dos 是把linux文件格式转换成windows文件格式,命令dos2unix 是把windows格式转换成linux文件格式。

情况一:

Git 可以在你提交时自动地把回车(CR)和换行(LF)转换成换行(LF),而在检出代码时把换行(LF)转换成回车(CR)和换行(LF)。 你可以用git config --global core.autocrlf true 来打开此项功能。 如果是在 Windows 系统上,把它设置成 true,这样在检出代码时,换行会被转换成回车和换行:

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

情况二:

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

#提交检出均不转换
$ git config --global core.autocrlf false

总之:

--- git 的 Windows 客户端基本都会默认设置 core.autocrlf=true,设置core.autocrlf=true, 只要保持工作区都是纯 CRLF 文件,编辑器用 CRLF 换行,就不会出现警告了;

--- Linux 最好不要设置 core.autocrlf,因为这个配置算是为 Windows 平台定制;

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

 

 

--- 提交代码时遇到一个有关于 “字体” 的警告:

具体警告内容为:“Warning: Your console font probably doesn’t support Unicode. If you experience strange characters in the output, consider switching to a TrueType font such as Lucida Console!”

 其中“Lucida Console”是一种字体;

 解决方法:

    --- 在打开的cmd窗口的标题栏上点击右键,选择“属性”;

         

 

    --- 点击切换到“字体”选项卡;

         

 

    --- 将“新宋体”设置为当前字体,如果有其它字体也可以,只要不是选择“点阵字体”即可,然后点击确定;

         

 

    --- 再执行git add命令,就会看到没有显示之前的warning警告信息了。

 

 

--- 提交代码时遇到一个有关于 “ ! [rejected]        master -> master (non-fast-forward) error: failed to push some refs to 'https:/” 的警告:

! [rejected] master -> master (non-fast-forward)

当我们向github做push的时候经常会被rejected,解决方法有pull和rebase两种,这一集里我们讨论一下这两种方式的异同。

推荐视频:http://happycasts.net/episodes/10?autoplay=true

 

当要push代码到git时,出现提示:

error:failed to push some refs to ...

Dealing with “non-fast-forward” errors
From time to time you may encounter this error while pushing:

$ git push origin master
To ../remote/
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to '../remote/'
$ git push origin master  
To ../remote/  
 ! [rejected]        master -> master (non-fast forward)  
error: failed to push some refs to '../remote/'  

To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the 'non-fast forward'
section of 'git push --help' for details.
This error can be a bit overwhelming at first, do not fear. Simply put, git cannot make the change on the remote without losing commits, so it refuses the push. Usually this is caused by another user pushing to the same branch. You can remedy this by fetching and merging the remote branch, or using pull to perform both at once.
In other cases this error is a result of destructive changes made locally by using commands like git commit --amend or git rebase. While you can override the remote by adding --force to the push command, you should only do so if you are absolutely certain this is what you want to do. Force-pushes can cause issues for other users that have fetched the remote branch, and is considered bad practice. When in doubt, don’t force-push.

 

问题(Non-fast-forward)的出现原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式:

1,强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容

git push -f

2,先把git的东西fetch到你本地然后merge后再push

$ git fetch

$ git merge

这2句命令等价于

$ git pull
$ git pull 

可是,这时候又出现了如下的问题:

 

上面出现的 [branch "master"]是需要明确(.git/config)如下的内容
[branch "master"]
remote = origin

merge = refs/heads/master

这等于告诉git2件事:

1,当你处于master branch, 默认的remote就是origin。

2,当你在master branch上使用git pull时,没有指定remote和branch,那么git就会采用默认的remote(也就是origin)来merge在master branch上所有的改变

如果不想或者不会编辑config文件的话,可以在bush上输入如下命令行:

$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master
$ git config branch.master.remote origin  
$ git config branch.master.merge refs/heads/master  

之后再重新git pull下。最后git push你的代码吧。

 

--- git无法pull仓库 refusing to merge unrelated histories

如果合并了两个不同的开始提交的仓库,在新的 git 会发现这两个仓库可能不是同一个,为了防止开发者上传错误,于是就给下面的提示, 

    

在Github新建一个仓库,然后把本地一个写了很久仓库上传。这时会发现 github 的仓库和本地的没有一个共同的 commit 所以 git 不让提交,认为是写错了 origin ,如果开发者确定是这个 origin 就可以使用 --allow-unrelated-histories  告诉 git 确定。

遇到无法提交的问题,一般先pull 也就是使用 git pull origin master 这里的 origin 就是仓库,而 master 就是需要上传的分支,因为两个仓库不同,发现 git 输出 refusing to merge unrelated histories 无法 pull 内容。

因为是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在 git pull 之后,这句代码是在git 2.9.2版本发生的,最新的版本需要添加 --allow-unrelated-histories 告诉 git 允许不相关历史合并。

假如我们的源是origin,分支是master,那么我们需要这样写git pull origin master --allow-unrelated-histories 如果有设置了默认上传分支就可以用下面代码 : git pull --allow-unrelated-histories


PS:这个方法只解决因为两个仓库有不同的开始点,也就是两个仓库没有共同的 commit 出现的无法提交。

 

 

 

 

(后续如果遇到其他的,会进行更新。未完待续。。。)

<think>好的,用户现在想了解如何将本地文件上传Gitee。首先,我需要回顾之前的对话历史。用户之前遇到了关于Git推送的错误,主要是分支名称不匹配的问题。现在他们的问题更基础,可能是一个刚开始使用GitGitee的新手。 首先,我需要确认用户的使用场景。他们可能已经在本地有一个项目,现在想将其上传Gitee的仓库。可能的情况包括:用户刚刚创建了一个新项目,或者已有文件需要首次推送到远程仓库。此外,用户可能对Git的基本操作不太熟悉,所以需要详细的步骤说明。 接下来,用户的真实需求可能不仅仅是上传文件,而是正确地将本地代码托管到Gitee,并确保后续可以顺利协作或备份。他们可能没有考虑到初始化仓库、添加远程仓库、处理分支名称等问题,这些都需要在回答中涵盖。 用户可能存在的深层需求是希望有一个简单明了的指南,避免遇到之前类似的错误,比如分支不匹配或推送失败的情况。因此,回答需要结构清晰,分步骤说明,并包含常见问题的解决方法,如SSH配置、强制推送的注意事项等。 我需要确保回答覆盖以下关键点:创建Gitee仓库、本地初始化Git仓库、添加文件、提交更改、关联远程仓库、推送代码,以及可能的后续操作如拉取更新。同,要提醒用户注意分支名称(main vs master),因为不同平台默认分支可能不同,避免再次出现之前的错误。 另外,需要考虑到用户可能遇到的权限问题,比如HTTPS推送可能需要账号密码,而SSH更安全方便。还要提到如何处理远程仓库已有内容的情况,比如强制推送或先拉取合并。 最后,确保语言简洁,步骤明确,每步都有示例命令,并给出常见问题的解决方案。这样用户即使遇到问题,也能根据指南自行排查解决,提升他们的使用体验。</think>--- ### **本地文件上传Gitee 的完整流程** --- #### **一、前期准备** 1. **注册 Gitee 账号** 访问 [Gitee 官网](https://gitee.com) 完成注册并登录。 2. **安装 Git** 下载地址:[Git 官网](https://git-scm.com/) 安装后验证版本: ```bash git --version ``` --- #### **二、Gitee 仓库创建** 1. **新建仓库** - 点击 Gitee 主页右上角 ➕ → **新建仓库** - 填写仓库名称(如 `my-project`) - 勾选 **初始化仓库** → 选择 **开源/私有** - 点击 **创建** 2. **记录仓库地址** - HTTPS 格式:`https://gitee.com/你的用户名/my-project.git` - SSH 格式:`git@gitee.com:你的用户名/my-project.git` --- #### **三、本地文件上传** 1. **初始化本地仓库** ```bash cd 你的项目文件git init ``` 2. **添加文件到暂存区** ```bash # 添加所有文件 git add . # 或指定文件 git add 文件名 ``` 3. **提交到本地仓库** ```bash git commit -m "首次提交:项目初始化" ``` 4. **关联远程仓库** ```bash git remote add origin 你的仓库地址 # 示例: git remote add origin https://gitee.com/你的用户名/my-project.git ``` 5. **推送到 Gitee** ```bash git push -u origin master # 如果远程默认分支为 main,则替换为: git push -u origin main ``` --- #### **四、常见问题与解决** | **问题** | **解决方案** | |----------------------------------|-----------------------------------------------------------------------------| | 推送报错 `remote: Incorrect username or password` | 改用 SSH 密钥认证:[Gitee SSH 配置指南](https://gitee.com/help/articles/4181) | | 提示 `Updates were rejected` | 强制推送(谨慎使用):`git push -f origin master` | | 远程仓库已有文件冲突 | 先拉取合并:`git pull origin master --allow-unrelated-histories` | --- #### **五、后续操作指南** 1. **日常更新文件** ```bash git add . git commit -m "更新描述" git push origin master ``` 2. **切换仓库协议** - **HTTPS 转 SSH**: ```bash git remote set-url origin git@gitee.com:你的用户名/my-project.git ``` --- #### **六、关键注意事项** 1. **分支名称统一性** - Gitee 默认分支可能为 `master` 或 `main`,通过 `git branch` 确认本地分支名。 2. **SSH 密钥配置** - 推荐使用 SSH 协议避免重复输入密码,配置命令: ```bash ssh-keygen -t ed25519 -C "your_email@example.com" cat ~/.ssh/id_ed25519.pub # 复制内容到 Gitee SSH 公钥设置页 ``` --- ### **操作流程图** ``` 本地文件夹 → git init → git add → git commit → 关联远程仓库 → git push ↑ ↓ 文件修改 Gitee 仓库同步 ``` 通过以上步骤,可高效完成本地文件Gitee 的托管。若遇复杂问题,建议提供 `git status` 和 `git remote -v` 的输出信息以便精准诊断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值