我的本地存储库处于禁止我提交、存储、签出到另一个分支甚至丢弃更改的状态。所以我只是卡住了。
据我所知,我将尝试描述是什么步骤让我陷入了这种境地。
请坐。
不久前,在另一台很远很远的计算机上......根据:https ://help.github.com/articles/dealing-with-line-endings 项目中的另一个开发人员标准化crlf
在此期间(你知道,光速......)我在本地进行了一些更改,提交并拉取。
当我拉动 Git 时说:
error: Your local changes to the following files would be overwritten by merge:
wp-config.php
wp-config.php
早先使用它从索引中删除,git update-index --assume-unchanged wp-config.php
因为它是一个适应每个本地环境的模板配置文件。
基础“模板”可以改变。没什么好惊讶的。这是我计划的:
- 重新索引
wp-config.php
stash
我自己的配置更改pull origin master
stash apply
我的配置回来了
第 3 步出现问题。git pull origin master
仍然引发上述错误,好像 stash 无效。
git status
说wp-config.php
没有为提交进行更改。藏起来后,这让我有点惊讶。
因为我隐藏了我的更改,所以我跑了git checkout -- wp-config.php
......但没有任何效果!文件仍未暂存以进行提交。
由于我疯了,我创建了一个新的分支 my-config,添加并提交wp-config.php
到它,然后切换回 master,删除wp-config.php
(使用git rm
),并合并 origin/master... 成功!
因此,既然 master 是最新且干净的,我计划在没有 Git 帮助的情况下恢复我自己的配置(手动编辑文件)。
因为我想知道发生了什么,所以我切换到 my-config 分支,并在这里尝试了一个非常简单的操作:
git stash
git stash apply
你猜怎么着?stash apply
失败说:
error: Your local changes to the following files would be overwritten by merge:
wordpress/license.txt
wordpress/readme.html
...
(all the files that where modified by the crlf conversion)
现在我被困在我的分支上(并计划看到它,法语国家会理解;))因为:
git stash apply
,commit
并checkout master
给出上面的错误git stash
产生一个隐藏条目,但不改变未暂存状态- 并且
git checkout -- <file>
都不会删除未分级的状态
我现在唯一能做的就是删除所有这些文件(使用 OS rm
)才能回到主分支。
真实的故事。
我很想了解 master 分支上发生了什么,然后是 my-config 分支上发生了什么,以及是什么让我陷入这种情况(我怀疑在 crlf 转换文件上使用 stash)。
重要笔记:
- 我在linux上运行
git core.autocrlf
开启input
- 我
.gitattributes
的与“处理行尾”文章中的相同 - 我对 Git 比较陌生(使用它的第二天)
当我stash
在 my-config 分支上执行时,它输出:
warning: CRLF will be replaced by LF in wordpress/license.txt.
The file will have its original line endings in your working directory.
... (one for each crlf converted file) ...
Saved working directory and index state WIP on my-config: dbf65ad my config -- should not be pushed
HEAD is now at dbf65ad my config -- should not be pushed
(dbf65ad
是我在 my-config 分支上所做的唯一提交)