Bagaimana cara menghapus file .orig setelah bergabung dari repositori git?

160

Beberapa cara file .orig diperiksa di repositori git saya selama penggabungan, yang sekarang ditampilkan di sektor yang dimodifikasi dan tidak dilacak. Tapi saya tidak ingin file ini lagi di repositori saya. Bagaimana cara melakukannya.

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

    etc...

Bantuan apa pun akan dihargai.

maximus ツ
sumber
Kemungkinan duplikat stackoverflow.com/questions/61212/…
ziu
@ziu, saya ingin menghapus file yang sudah ada di repositori saya, diperiksa oleh git merge atau oleh pengembang lain
maximus ツ
1
Saya melewatkan bagian tentang file check-in. Namun, file .orig ditulis oleh mergetool. Bagi saya kedengarannya sebagai resolusi konflik yang tidak bersih.
ziu
Apakah Anda perlu menghapus file sepenuhnya dari seluruh riwayat?
linquize

Jawaban:

253

Solusi terbaik dalam hal ini adalah tetap sederhana dan singkirkan file-file tersebut secara independen dari git:

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

Atau, di Windows / PowerShell, Anda dapat menjalankan perintah berikut

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item
TheChymera
sumber
14
Jika Anda mendapatkan kesalahan penggunaan predikat: temukan. -nama '* .orig' | xargs rm -f
Neil
Sama seperti peringatan, menggunakan 'find -delete' bisa berbahaya. Harap periksa bahwa direktori (dalam hal ini '.') Benar untuk memastikan bahwa Anda hanya menghapus apa yang ingin Anda hapus
kingledion
8
Ini rasa sakit yang git clean -dftidak melakukannya. Mengapa kita harus membersihkan sampah yang ditinggalkan secara manual?
Sridhar Sarnobat
Bagaimana dengan Windows?
Panzercrisis
3
@ Panzercrisis jika Anda menggunakan Windows Anda mungkin sudah memiliki terminal emulator di mana Anda berinteraksi dengan Git. Saya akan merekomendasikan "gitforwindows" yang berisi BASH dengan semua alat lain yang biasanya dibutuhkan.
TheChymera
151

Coba git cleaninfo lebih lanjut yang dapat Anda temukan di sini atau di sini

Amar
sumber
1
Saya dapat membersihkan file yang tidak dilacak, tetapi bagaimana dengan menghapus file seperti itu yang sudah ada di repositori.
maximus ツ
Anda harus terlebih dahulu menghapus file dari repositori git rm <filename>dan kemudian melakukan commit. Setelah ini tambahkan file * .orig ke dalam diabaikan git.
Amar
4
Saya pikir ini adalah solusi yang lebih baik daripada yang ditandai sebagai jawaban.
Orgmir
51
git clean -isangat bagus. itu akan memberi Anda daftar file yang akan dihapus dan memberi Anda opsi tentang cara menangani daftar (memfilter daftar, bisa menghapus semua yang ada dalam daftar, dan beberapa opsi lainnya).
PPPaul
1
Anda dapat menggunakan git clean dengan pola untuk membantu menghapus hanya file file * .orig: git clean -f -e '*.*' -e '!*.orig' Hanya ada pola kecualikan, tetapi ia memiliki sedikit dukungan untuk pola negatif. Jadi kita bisa mengecualikan semua file *.*, dan kemudian meniadakan pengecualian hanya *.origfile.
leorleor
6

Anda dapat mengabaikan file menggunakan .gitignore

Masukkan * .orig dalam daftar seperti yang ditunjukkan di sini

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

untuk menghapus file saat ini Anda dapat membuat skrip shell dan menjalankan dari folder proyek seperti di bawah ini

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done
Loken Makwana
sumber
5
Meskipun dia pasti bisa melakukan ini, itu bukan hal yang benar untuk dilakukan di sini :)
Sergio Tulentsev
1
Saya pikir itu ide yang baik karena menyimpan cadangan tetapi tidak mengganggu file yang dipentaskan
akazemis
@akazemis - Anda akan berpikir begitu, tetapi ketika Anda memahami kode, Anda melihat hasil pencarian dua kali lebih banyak dari yang Anda inginkan (yang memberi Anda persepsi salah tentang apa yang ada dalam kode terbaru Anda). Sangat jarang bahwa saya lebih suka hidup dengan bahaya tidak memiliki file orig. Lebih baik hanya berkomitmen secara teratur.
Sridhar Sarnobat
5

Sayangnya git cleantidak berfungsi untuk saya karena saya telah *.origmenambahkan ke file global gitignore saya, jadi mereka diabaikan juga. Bahkan menjalankannya git clean -xtidak baik karena saya tidak ingin semua file saya yang diabaikan dihapus. git clean -isangat membantu, tetapi sebenarnya saya tidak ingin harus meninjau setiap file.

Namun, kita dapat menggunakan pola kecualikan dan meniadakan kecocokan. Pratinjau dengan perintah ini:

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

Kemudian ketika Anda yakin, lulus forcebendera untuk benar-benar menghapusnya:

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

Berdasarkan komentar leorleor

Jeff Puckett
sumber
3

git rm Gemfile.lock.orig dan sisa file yang tidak Anda butuhkan. git commit --amend

Untuk sepenuhnya menghapus gumpalan itu, git gc --prune=0 --aggressive

linquize
sumber
@linquizebut komit git rm Gemfile.lock.orig akan masuk komit terakhir menggunakan amend, kan? adakah cara lain untuk tidak memiliki komitmen untuk file tersebut?
maximus ツ
2

Bagi saya git clean -fmenghapus semua file * .oig. Dan menyimpan yang sudah ada sebelumnya.

Ini adalah (hampir) seperti setelah penggabungan:

$ 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/sudah ada sebelum penggabungan sebagai file yang tidak terlacak. .idea/misc.xml.orig(dan banyak lagi) harus dihapus.

=> Menggunakan git clean -f:

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

menghasilkan:

$ 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/
Ueffes
sumber
0

Anda bisa melakukannya git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL; DR;

git status -s memungkinkan Anda untuk mendapatkan semua file yang dimodifikasi / hilang sehubungan dengan indeks

grep "\.orig$" memfilter file, menjaga akhiran dengan ".orig"

awk '{print $2}' daftar nama file (melewatkan informasi git misalnya A, M, ??)

xargs -n1 -r echo rm cetakan menghapus perintah pada setiap argumen (-n1: satu per satu dan -r: lewati saat kosong) cukup salin & tempel perintah periksa ulang untuk menghapus file.

fiorentinoing
sumber
Meskipun ini dapat menjawab pertanyaan penulis, tidak ada beberapa kata yang menjelaskan dan / atau tautan ke dokumentasi. Cuplikan kode mentah tidak sangat membantu tanpa frasa di sekitarnya. Anda juga dapat menemukan cara menulis jawaban yang baik sangat membantu. Harap edit jawaban Anda.
hellow
-4

git rm <file>

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

Juga tambahkan file / direktori yang ingin Anda abaikan ke file .gitignore Anda.

veritas1
sumber
git rm <file> <file>Cukup daftarkan mereka.
veritas1
Kemudian Anda perlu membuat daftar semua file, atau menggunakan alat seperti find untuk meneruskannya ke git rm, atau menggunakan shell glob dan memutarnya. Git tidak menduplikasi fungsionalitas baris perintah Unix standar ini.
mabraham
1
file orig tidak ditambahkan ke repositori, jadi tidak perlu menggunakan git rm, cukup gunakan rmsaja
Edson Medina