git 错误集合

2017/02/18

git 错误集合

git pull报错:Auto Merge Failed; Fix Conflicts and Then Commit the Result.

出错场景

协同开发时,我们从远程服务器上 pull 下代码的时候,出现以下提示信息:
Auto Merge Failed; Fix Conflicts and Then Commit the Result.

原因分析

分析 git pull 的原理,实际上 git pull 是分了两步走的:

  1. 从远程 pull 下 origin/master 分支
  2. 将远程的 origin/master 分支与本地 master 分支进行合并

以上的错误,是出在了第二步,本地与远程文件合并时存在冲突

解决方法

方法一:如果我们确定远程的分支正好是我们需要的,而本地的分支上的修改比较陈旧或者不正确,那么可以直接丢弃本地分支内容,运行如下命令(看需要决定是否需要运行 git fetch 取得远程分支):

$:git reset --hard origin/master
或者$:git reset --hard ORIG_HEAD

方法二:我们不能丢弃本地修改,因为其中的某些内容的确是我们需要的,此时需要对 unmerged 的文件进行手动修改,删掉其中冲突的部分,然后运行如下命令:

$:git add filename
$:git commit -m "message"
$:git push origin master

方法三:如果我们觉得合并以后的文件内容比较混乱,想要废弃这次合并,回到合并之前的状态,那么可以运行如下命令:
$:git reset --hard HEAD

git warning: LF will be replaced by CRLF in 解决办法

出错场景

在使用 git 的时候,每次执行 $ git add "目录" $ git add . 都会提示这样一个警告消息: warning: LF will be replaced by CRLF in XXXXXXXXXXXXXX.

原因分析

CRLF – Carriage-Return Line-Feed 回车换行,就是回车(CR, ASCII 13, \r) 换行 (LF, ASCII 10, \n)。
这两个 ACSII 字符不会在屏幕有任何输出,但在 Windows 中广泛使用来标识一行的结束。而在 Linux/UNIX 系统中只有换行符。
也就是说在 windows 中的换行符为 CRLF, 而在 linux 下的换行符为:LF
使用 git 来生成一个 rails 工程后,文件中的换行符为 LF, 当执行 git add .时,系统提示:LF 将被转换成 CRLF

解决方法

删除生成的 .git 文件

$ rm -rf .git  
$ git config --gobal core.autocrlf false  

这样系统就不会去进行换行符的转换了
最后重新执行

$ git init
$ git add .

但我在实践中发现:直接运行 $ git config --gobal core.autocrlf false,不用删除生成的 .git 文件也可以,当然也不用执行 git init

nothing added to commit but untracked files present

问题

Untracked files: 
../target/ 
../zblog.iml 
nothing added to commit but untracked files present

大致的意思是说文件被追踪,但是没有被添加 git 中。

解决方案

1. 不想提交文件

添加 git 忽略文件 .gitignore

将不想提交的文件写入到 .gitgnore 文件中。记得要把 .gitignore 也添加进来

主要步骤:

  1. git status 列出当前目录所有还没有被 git 管理的文件和被 git 管理且被修改但还未提交(git commit)的文件.
     $ git status
     On branch master
     Your branch is up-to-date with 'origin/master'.
     Untracked files:
       (use "git add <file>..." to include in what will be committed)
             /target/
             zblog.iml
     nothing added to commit but untracked files present (use "git add" to track)
    
  2. 将要忽略的文件写入到 .gitignore

    vim .gitignore

    追加如下内容(根据自己的提示添加)

     /target/ 
     zblog.iml
    

PS: 注意实际路径可以用 * 模糊操作

2. 想提交文件

  1. git status 列出当前目录所有还没有被 git 管理的文件和被 git 管理且被修改但还未提交(git commit)的文件.
     $ git status
     On branch master
     Your branch is up-to-date with 'origin/master'.
     Untracked files:
       (use "git add <file>..." to include in what will be committed)
             /target/
             zblog.iml
     nothing added to commit but untracked files present (use "git add" to track)
    
  2. 将这些文件或文件夹 add 进去

     git add /target/.
     git add zblog.iml
    

PS: git add 一次可以添加多个文件,如:git add a.html b.html c.html