从git存储库合并后如何删除.orig文件?


160

合并过程中如何在我的git存储库中检查.orig文件的一些内容,这些文件现在显示在已修改和未跟踪的扇区中。但是我不希望这个文件在我的存储库中了。怎么做。

    modified:   Gemfile.lock.orig
    #   modified:   Gemfile.orig
    #   modified:   app/assets/images/bg_required.png.orig
    #   modified:   app/assets/javascripts/application.js.orig

    etc...

任何帮助将不胜感激。



@ziu,我想删除存储库中已存在的文件,这些文件已通过git merge或其他开发人员签入
maximus 2012年

1
我错过了有关签入文件的部分。但是,.orig文件是由mergetool编写的。在我看来,这是一种不干净的冲突解决方案。
ziu 2012年

您是否需要从整个历史记录中完全删除该文件?
linquize 2012年

Answers:


253

在这种情况下,最好的解决方案是保持简单并独立于git摆脱那些文件:

cd /your/repo/directory
find . -name '*.orig' -delete 

或者,在Windows / PowerShell中,您可以运行以下命令

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item

14
如果遇到谓词错误,请使用:find。名称'* .orig'| xargs rm -f
Neil

就像警告一样,使用'find -delete'可能很危险。请检查目录(在这种情况下为“。”)是否正确,以确保您仅删除要删除的内容
kingledion

8
痛苦git clean -df没有做到。为什么我们必须手动清理残留的垃圾?
Sridhar Sarnobat

Windows呢?
Panzercrisis

3
@Panzercrisis,如果您使用的是Windows,则可能已经有了一个终端仿真器,可以通过它与Git交互。我建议使用“ gitforwindows”,其中包含BASH和所有其他常用工具。
TheChymera '18

151

尝试git clean更多信息,您可以在这里这里找到


1
我可以清理未跟踪的文件,但是如何删除存储库中已经存在的此类文件呢?
maximus

您必须首先从存储库中删除文件git rm <filename>,然后提交。在此之后,将* .orig文件添加到git ignore中。
2012年

4
我认为这比标记为答案的解决方案更好。
Orgmir 2014年

51
git clean -i真的很好 它会为您提供将要删除的文件的列表,并为您提供有关如何处理列表的选项(筛选列表,能够删除列表中的所有内容以及其他一些选项)。
PPPaul

1
您可以使用带有模式的git clean来帮助删除仅* .orig文件的文件: git clean -f -e '*.*' -e '!*.orig' 只有排除模式,但是对否定模式有一点支持。因此,我们可以排除所有文件*.*,然后否定仅排除*.orig文件。
leorleor


6

您可以使用.gitignore忽略文件

只需将* .orig放在列表中,如下所示

https://help.github.com/articles/ignoring-files

要删除当前文件,您可以创建外壳脚本并从项目文件夹运行,如下所示

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done

5
尽管他当然可以做到,但在这里不是正确的事:)
Sergio Tulentsev 2012年

1
我认为这是一个好主意,因为它可以保留备份但不干扰暂存的文件
akazemis,2016年

@akazemis-您会这样想,但是当您在查找代码时,发现的搜索结果是您想要的两倍(这使您对最新代码中的内容有错误的认识)。如此罕见的是,我宁愿忍受没有原始文件的危险。最好只是定期提交。
Sridhar Sarnobat '18

5

不幸的是,git clean这对我不起作用,因为我已将其*.orig添加到全局gitignore文件中,因此它们也将从干净的文件中忽略。即使运行git clean -x是没有好,因为我不想让所有的我忽略的文件越来越删除。git clean -i是有帮助的,但实际上我不想查看每个文件。

但是,我们可以使用排除模式并取消匹配。使用以下命令预览:

git clean -e '!*.orig' --dry-run

然后,当您有信心时,传递force标志以将其真正删除:

git clean -e '!*.orig' -f

根据leorleor的评论


3

git rm Gemfile.lock.orig 以及其余不需要的文件。 git commit --amend

要完全清除这些斑点, git gc --prune=0 --aggressive


@linquizebut git rm的提交Gemfile.lock.orig将使用amend进入最后的提交,对吗?还有什么其他方法可以不对该文件进行任何提交?
maximus

2

对我来说,git clean -f删除了所有* .oig文件。并保留以前已经存在的那些。

合并后的样子(几乎)是这样的:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
    .idea/misc.xml.orig

.idea/codeStyles/在合并之前已经作为未跟踪文件存在。.idea/misc.xml.orig(还有更多)必须删除。

=>使用git clean -f

$ git clean -f
Removing .idea/misc.xml.orig

导致:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/

0

你可以做 git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL; DR;

git status -s 允许您获取有关索引的所有修改/丢失的文件

grep "\.orig$" 过滤掉文件,以“ .orig”结尾

awk '{print $2}' 列出文件名(跳过git信息,例如A,M,??)

xargs -n1 -r echo rm 在每个参数上打印删除命令(-n1:一次,-r:空时跳过),只需复制并粘贴命令,然后仔细检查要删除的文件。


尽管这可以回答作者的问题,但缺少一些解释性的单词和/或指向文档的链接。如果没有原始代码段,则原始代码段不是很有帮助。您可能还会发现如何写一个好的答案很有帮助。请修改您的答案。
hellow

-4

git rm <file>

http://git-scm.com/docs/git-rm

还要将要忽略的文件/目录添加到.gitignore文件中。


git rm <file> <file>只要列出他们。
veritas1 2012年

然后,您需要列出所有文件,或使用诸如find之类的工具将其传递给git rm,或使用shell glob并在其上循环。Git不会复制此标准Unix命令行功能。
mabraham 2013年

1
原稿文件不会被添加到库中,所以没有必要使用git rm,只是用rm代替
埃德森麦地那
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.