Как удалить .orig файлы после слияния из репозитория git?

Некоторые, как файлы .orig проверяются в моем репозитории git во время слияния, которые теперь отображаются в измененном и не отслеживаемом секторе. Но я больше не хочу, чтобы эти файлы были в моем репозитории. Как это сделать.

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

    etc...

Любая помощь будет оценена.

Ответ 1

Лучшее решение в этом случае - сохранить простоту и избавиться от этих файлов независимо от git:

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

Кроме того, в Windows/PowerShell вы можете выполнить следующую команду

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

Ответ 2

Попробуйте git clean более подробную информацию вы можете найти здесь или здесь

Ответ 4

Вы можете игнорировать файлы, используя .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

К сожалению, git clean не работает для меня, потому что я добавил *.orig в мой глобальный файл gitignore, поэтому они также игнорируются из clean. Даже запуск git clean -x бесполезен, потому что я не хочу, чтобы все мои игнорируемые файлы были удалены. git clean -i полезен, но на самом деле я не хочу проверять каждый файл.

Тем не менее, мы можем использовать шаблон исключения и отменить совпадение. Предварительный просмотр с этой командой:

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

Затем, когда вы уверены, передать force флаг действительно удалить их:

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

Основано на комментарии leorleor

Ответ 6

git rm Gemfile.lock.orig и остальные файлы, которые вам не нужны. git commit --amend

Чтобы полностью удалить эти капли, git gc --prune=0 --aggressive

Ответ 7

Для меня 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/

Ответ 8

Вы можете записать команду из fooobar.com/questions/61610/... в ловушку перед фиксацией, поэтому этот порядок выполняется автоматически каждый раз перед выполнением фиксации:

Для этого выполните:

cd /your/repo/directory/.git/hooks
echo '#!/bin/sh' >> pre-commit | echo 'find . -name *.orig -delete' >> pre-commit

Ответ 9

вы можете просто сделать git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm 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: пропускать, когда пусто), просто скопируйте и вставьте команды, дважды проверяя файлы для удаления.

Ответ 10

git rm <file>

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

Также добавьте файлы/каталоги, которые вы хотите игнорировать, в свой .gitignore файл.