gitリポジトリからマージした後に.origファイルを削除するにはどうすればよいですか?


160

マージ中に.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...

どんな助けでもありがたいです。



@ziu、リポジトリに既に存在し、git mergeまたは他の開発者によってチェックインされたファイルを削除したい
maximusツセップ

1
チェックインされたファイルに関する部分を逃しました。ただし、.origファイルはmergetoolによって書き込まれます。それは私には不明瞭な紛争解決のように聞こえます。
ziu

履歴全体からファイルを完全に削除する必要がありますか?
2012

1
このチェックアウトstackoverflow.com/questions/872565/...
ziu

回答:


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を使用してください。-name '* .orig' | xargs rm -f
Neil

警告と同じように、「find -delete」を使用すると危険な場合があります。ディレクトリ(この場合は「。」)が正しいことを確認して、削除するものだけを削除していることを確認してください
kingledion

8
それはそれをgit clean -dfしない痛みです。残されたゴミを手動でクリーンアップする必要があるのはなぜですか?
Sridhar Sarnobat

Windowsはどうですか?
Panzercrisis

3
@Panzercrisis Windowsを使用している場合は、Gitとのインターフェースとして使用するターミナルエミュレーターがすでにあるはずです。私は他のすべての一般的に必要なツールとBASHを含む「gitforwindows」をお勧めします。
TheChymera

151

ここまたはここでgit clean見つけることができるより多くの情報を試してください


1
追跡されていないファイルをクリーンアップできますが、リポジトリに既にあるファイルを削除するとどうなりますか?
マキシマツツ

最初にリポジトリからファイルを削除してからgit rm <filename>コミットする必要があります。この後、*。origファイルをgit ignoreに追加します。
アマール

4
これは答えとしてマークされたものよりも良い解決策だと思います。
Orgmir 2014年

51
git clean -i本当にいいです。これにより、削除されるファイルのリストが表示され、リストの処理方法に関するオプションが提供されます(リストをフィルタリングし、リスト上のすべてを削除できること、およびその他のオプション)。
PPPaul 2014

1
パターンでgit cleanを使用して、*。origファイルのみを削除することができます。 git clean -f -e '*.*' -e '!*.orig' 除外パターンしかありませんが、否定パターンはほとんどサポートされていません。したがって、すべてのファイルを除外して*.**.origファイルのみの除外を無効にすることができます。
leorleor 2015年


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
彼は確かにこれを行うことができますが、ここで行うことは適切ではありません:)
セルジオトゥレンツェフ2012

1
私はそれがバックアップを保持して、それは良いアイデアだと思ったが、ファイルを上演干渉しない
akazemis

@akazemis-あなたはそう思うだろうが、コードをgrepすると、必要な数の2倍の検索結果が表示されます(これにより、最新のコードの内容が誤って認識されます)。私はorigファイルを持たないという危険を冒して生きたいと思うほど珍しいです。定期的にコミットすることをお勧めします。
Sridhar Sarnobat

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


git rm Gemfile.lock.origの@linquizebutコミットは、修正を使用して最後のコミットに入りますよね?そのようなファイルに対してコミットしないようにする他の方法はありますか?
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:一度に1つ、-r:空の場合はスキップ)コマンドをコピーして貼り付け、削除するファイルをダブルチェックします。


これは著者の質問に答えるかもしれませんが、説明する単語やドキュメントへのリンクが不足しています。生のコードスニペットは、周りにいくつかのフレーズがないとあまり役に立ちません。また、良い答えの書き方も非常に役立ちます。回答を編集してください。
2018年

-4

git rm <file>

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

また、無視したいファイル/ディレクトリを.gitignoreファイルに追加します。


git rm <file> <file>それらをリストしてください。
veritas1 2012

次に、すべてのファイルを一覧表示するか、findなどのツールを使用してそれらをgit rmに渡すか、シェルグロブを使用してループします。Gitはこの標準のUnixコマンドライン機能を複製しません。
マブラハム2013

1
元のファイルはリポジトリに追加されないため、を使用する必要はありません。代わりにgit rm使用rmしてください
エドソンメディナ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.