174

在合并期间如何在我的 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...

任何帮助将不胜感激。

4

11 回答 11

294

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

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

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

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item
于 2014-01-03T02:46:29.853 回答
156

尝试git clean更多信息,您可以在此处此处找到

于 2012-09-11T09:01:33.997 回答
111

你可以做:

git config --global mergetool.keepBackup false

有关详细信息,请参阅Git 合并工具生成不需要的 .orig 文件

于 2015-12-08T06:57:15.033 回答
11

不幸的是git clean,这对我不起作用,因为我已经*.orig添加到我的全局 gitignore 文件中,所以它们也被 clean 忽略了。即使运行git clean -x也不好,因为我不希望我所有被忽略的文件都被删除。git clean -i很有帮助,但我真的不想检查每个文件。

但是,我们可以使用排除模式并否定匹配。使用此命令预览:

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

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

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

基于leorleor的评论

于 2018-05-26T21:42:06.413 回答
6

您可以使用 .gitignore 忽略文件

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

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

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

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done
于 2012-09-11T09:01:29.907 回答
3

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

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

于 2012-09-11T10:05:18.417 回答
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/
于 2018-01-25T17:35:38.530 回答
0

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

TL;博士;

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

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

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

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

于 2018-04-17T08:51:06.960 回答
0

您可以使用预提交挂钩自动执行此过程。为此,只需进入项目文件夹,然后搜索 hidden folder .git。在里面你会找到hooks目录,打开它,然后 cr8 一个pre-commit用下一个命名的文件包含:

echo "Looking for .orig files to remove"
pwd=$(pwd)
find . -name '*.orig' -delete 
echo "Done removing .orig files"

现在它会在你提交之前清理 orig 文件,所以没有必要将它保存在 gitignore 中。

于 2020-10-09T11:28:59.587 回答
0

对于那些使用Windows 机器的人,您可以在 PowerShell 中执行此命令。

ls -Recurse *.orig | rm -Force

或者,如果您更喜欢详细的 PowerShell

Get-ChildItem -Recurse *.orig | Remove-Item -Force
于 2022-02-25T23:45:38.970 回答
-4

git rm <file>

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

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

于 2012-09-11T09:01:20.630 回答