我有一个git repo,我在本地替换了很多文件.
git status现在显示许多修改过的文件.
有些是"真正修改过",有些只是因行结尾而有所不同.
我希望那些只有行结尾不同的东西消失(git重置它们),但我似乎无法找到linux-piping-foo来实现它.
关于如何删除唯一区别为可执行位的文件的奖励要点.
Ari*_*zis 46
这样做:
git diff -b --numstat \
| egrep $'^0\t0\t' \
| cut -d$'\t' -f3- \
| xargs git checkout HEAD --
Run Code Online (Sandbox Code Playgroud)
diff -b.git checkout分支尖端.这个管道将为你离开的每个步骤做一些合理的事情,所以你可以从第一行开始,然后添加更多以查看每一步发生的事情.
一个可能有用的替代最后一行:
| git checkout-index --stdin
Run Code Online (Sandbox Code Playgroud)
这会将文件重置为其暂存内容而不是其上次提交状态.
您可能还希望git diff HEAD在第一行使用,以获得针对上次提交而不是针对索引的工作副本的差异.
注意:如果您的文件名中包含空格,则首先需要添加tr:
git diff -b --numstat \
| egrep $'^0\t0\t' \
| cut -d$'\t' -f3- \
| tr '\n' '\0' \Run Code Online (Sandbox Code Playgroud)
然后,您必须将-0/ -zswitch 添加到您想要使用的最终命令:
| xargs -0 git checkout HEAD --
# or
| git checkout-index --stdin -zRun Code Online (Sandbox Code Playgroud)
虽然看起来您最初是在寻找基于管道的解决方案并且是从 @aristotle-pagaltzis 那里得到的,但由于它有点难以记住,我认为这种替代方案值得注意:
git diff -b > gitdiffb
git stash # or git reset --hard if you feel confident
git apply --ignore-space-change gitdiffb
Run Code Online (Sandbox Code Playgroud)
如果不仅更改空白数字,而且还应忽略全新或完全删除的空白,请替换-b为-w.
结果与基于管道的解决方案不同,即使在也包含相关更改的文件中删除空白更改也是如此。因此,这与您描述的方式不完全相同,但对于通过搜索引擎来到这里的大多数人来说,可能更愿意寻找这一点。
| 归档时间: |
|
| 查看次数: |
5883 次 |
| 最近记录: |