Git crlf正常化后使用隐藏的卡住回购?
我的本地回购处于禁止我提交、隐藏、签出到另一个分支,甚至放弃更改的状态。所以我被卡住了 据我记忆所及,我将试图描述是什么步骤使我陷入这种境地 请坐 不久前,在另一台电脑里,很远很远。。。项目中的其他开发人员规范化了crlf,根据: 在这段时间里(你知道,光速…),我在本地做了一些更改,提交了,并拉了 当我拉Git时,他说:Git crlf正常化后使用隐藏的卡住回购?,git,newline,git-stash,Git,Newline,Git Stash,我的本地回购处于禁止我提交、隐藏、签出到另一个分支,甚至放弃更改的状态。所以我被卡住了 据我记忆所及,我将试图描述是什么步骤使我陷入这种境地 请坐 不久前,在另一台电脑里,很远很远。。。项目中的其他开发人员规范化了crlf,根据: 在这段时间里(你知道,光速…),我在本地做了一些更改,提交了,并拉了 当我拉Git时,他说: error: Your local changes to the following files would be overwritten by merge: wp-
error: Your local changes to the following files would be overwritten by merge:
wp-config.php
wp config.php
先前是使用git update index从索引中删除的——假设wp config.php
没有改变,因为它是一个适合于每个本地环境的模板配置文件
基本“模板”可以更改。没什么奇怪的。以下是我的计划:
wp config.php
隐藏
我自己的配置更改pull origin master
stash apply
my config backgit-pull-origin-master
仍然引发上述错误,就好像隐藏无效一样
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帮助的情况下恢复自己的配置(手动编辑文件)
因为我想知道发生了什么,我切换到我的配置分支,并在这里尝试了一个非常简单的操作:
git stash
git 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
生成一个stash条目,但不会更改未老化状态git stash
- 和
都不会删除未老化状态git checkout--
rm
),以便能够返回到主分支
真实的故事
我很想了解主分支上发生了什么,然后是我的配置分支上发生了什么,以及在这种情况下是什么导致了我(我怀疑在crlf转换文件上使用了隐藏)。
重要提示:
- 我在linux上运行
打开git core.autocrlf
input
- 我的
与“处理行尾”一文中的内容相同.gittributes
- 我对Git比较陌生(使用Git的第二天)
隐藏时,它输出:
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
是我在配置分支上所做的唯一提交)重置本地模块的最佳方法是使用
git clean -f -x -d
这将有效地删除对本地模块的所有未跟踪更改,并将其恢复为“普通”状态
-f
清理文件。
-x
清理通常被.gitignore忽略的文件。
-d
清除目录
现在运行git reset--hard origin/
。这会将您的分支重置为远程分支的状态
git status
此时应该告诉您:
# On branch master
nothing to commit (working directory clean)
如果您已经保存了实际更改,那么您应该能够git stash apply
将它们正确地放回原处
如果git stash show stash@{0}
显示的更改比您预期的要多,您只需使用git checkout stash@{0}--
应用您希望看到的更改即可
希望这有帮助首先,关于GitHub帮助页面,我郑重建议设置:
git config --global core.autocrlf false
将eol修改保留为中的显式声明,而不是全局魔术规则:
第二,你可以看看你是否在git stash上观察到相同的eol修改。经过一些研究,我猜发生了以下情况。您的同事更改了导致第一次拉动冲突的线条端点
这就是为什么你把你的工作藏起来,把东西拿出来(现在没有问题了),然后又开始使用藏起来的东西
通过调用git stash apply
git启动一系列隐藏的更改
错误消息只是告诉您遇到了合并冲突。根据开发人员的建议,在解决冲突后,这可以通过git存放区来解决:
“应用[stash]可能会因冲突而失败;在本例中,情况并非如此
已从隐藏列表中删除。您需要手动解决冲突
然后手动调用git stash drop
。”
结论:如果必须在现有项目中配置行尾,最好在项目文件夹中使用.gittributes
。由于它随行结束的变更提交一起分发,因此将避免将当前工作切换到新的规范化标准的麻烦
更改项目和.gittributes中的行尾
根据的开发人员文档,您可以通过以下步骤更改所有文件(在活动分支中)的行尾:
$ echo "<<filepattern>> eol=lf" >>.gitattributes
$ rm .git/index # Remove the index to force Git to
$ git reset # re-scan the working directory
$ git status # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"
$echo“eol=lf”>.gittattributes
$rm.git/index#删除索引以强制git
$git reset#重新扫描工作目录
$git status#显示将规范化的文件
$git添加-u
$git add.gittattributes
$git commit-m“引入行尾规范化”
用图案替换