在git中,如何仅从更改的行中删除Windows行结尾?

时间:2016-03-18 18:57:59

标签: git bash

有时,当我尝试将代码贡献给开源项目时,项目尚未格式化,并且包含UNIX和Window行结尾。我的聪明&#34; IDE将以某种方式检测每个文件使用哪种类型的结尾,如果它检测到Windows行结尾,那么我的所有更改都将具有Windows行结尾(在{% extends "blog/base.html" %} {% block title %}Search{% endblock %} {% block content %} {% if results %} <h1>Posts containing "{{ cd.query }}"</h1> <h3>Found {{ total_results }} result{{ total_results|pluralize}}</h3> {% for result in results %} {% with post=result.object %} <h4><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h4> {{ post.body|truncatewords:5 }} {% endwith %} {% empty %} <p>There are no results for your query.</p> {% endfor %} <p><a href="{% url 'blog:post_search' %}">Search again</a></p> {% else %} <h1>Search for posts</h1> <form action="." method="get"> {{ form.as_p }} <input type="submit" value="Search"> </form> {% endif %} {% endblock %} 中显示为^M)。如何仅从我更改的行而不是整个文件中删除这些Windows行结尾?

1 个答案:

答案 0 :(得分:6)

假设您的更改未提交,则以下内容应该有效:

git diff

说明:

  1. 将您的更改备份为存储:

    git stash save 'backup-before-removing-windows-line-endings' &&
    git stash show -p | perl -pe 's/^([+][^\r]*)\r/$1/g' | git apply - &&
    git stash drop
    
  2. 输出您的隐藏更改(git stash save 'backup-before-removing-windows-line-endings' ),但使用git stash show -p删除已更改行(特别是以\r开头的行)的回车(+)。将结果传递给perl以重新应用您的更改,而无需回车。

    git apply -
  3. 如果上述命令成功,请删除备份存储:

    git stash show -p | perl -pe 's/^([+][^\r]*)\r/$1/g' | git apply -