我们在键盘上留下的余温, 也将随时代传递到更远的将来


:D 获取中...

收集 git 常见问题

git 中 fatal: Authentication failed 的问题

方法一:

1
2
$  git config --global --replace-all user.email "输入你的邮箱"
$ git config --global --replace-all user.name "输入你的用户名"

这个方法在 mac 上行的通, 但是如果是 windows 好像不太好使

方法二: 打开控制面板 >> 用户账户 >> 凭据管理器 >> Windows 凭据 >> 删除对应的 git 凭据

方法三:

git config --system --unset credential.helper

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 取得远程分支):

1
2
3
$: git reset --hard origin/master
# 或者
$: git reset --hard ORIG_HEAD

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

1
2
3
$: 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 文件

1
2
$: rm -rf .git
$: git config --gobal core.autocrlf false

这样系统就不会去进行换行符的转换了

最后重新执行

1
2
$: git init
$: git add .

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

nothing added to commit but untracked files present

问题

1
2
3
4
Untracked files:
../target/
../zblog.iml
nothing added to commit but untracked files present

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

解决方案

1. 不想提交文件

添加 git 忽略文件 .gitignore

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

主要步骤:

  1. git status 列出当前目录所有还没有被 git 管理的文件和被 git 管理且被修改但还未提交(git commit)的文件.

    1
    2
    3
    4
    5
    6
    7
    8
    $ 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

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

    1
    2
    /target/
    zblog.iml

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

2. 想提交文件

  1. git status 列出当前目录所有还没有被 git 管理的文件和被 git 管理且被修改但还未提交(git commit)的文件.

    1
    2
    3
    4
    5
    6
    7
    8
    $ 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 进去

    1
    2
    git add /target/.
    git add zblog.iml

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


 评论

 无法加载Disqus评论系统,请确保您的网络能够正常访问。