Git crlf正常化后使用隐藏的卡住回购?

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-

我的本地回购处于禁止我提交、隐藏、签出到另一个分支,甚至放弃更改的状态。所以我被卡住了

据我记忆所及,我将试图描述是什么步骤使我陷入这种境地

请坐

不久前,在另一台电脑里,很远很远。。。项目中的其他开发人员规范化了crlf,根据:

在这段时间里(你知道,光速…),我在本地做了一些更改,提交了,并拉了

当我拉Git时,他说:

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
没有改变,因为它是一个适合于每个本地环境的模板配置文件

基本“模板”可以更改。没什么奇怪的。以下是我的计划:

  • reindex
    wp config.php
  • 隐藏
    我自己的配置更改
  • pull origin master
  • stash apply
    my config back
  • 第三步出了问题
    git-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
      给出上述错误
    • git stash
      生成一个stash条目,但不会更改未老化状态
    • git checkout--
      都不会删除未老化状态
    我现在唯一能做的就是删除所有这些文件(使用OS
    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“引入行尾规范化”
    
    用图案替换