Git'e aynı anda birden fazla dosya ekleme


120

Bu benim ilk kullanımım olacak. Klasöre / projeye (git yerel deposu) yeni dosyalar (çok) ekledim.

Çevrimiçi eğitimleri ve forumları inceledim ve yapabileceğimi görüyorum

git commit -a

Bu yüzden, deponun temel klasörüne gidiyorum ve bir

sudo git commit -a

Ama sonra bazı ekranlar geliyor ve benim yaptığım bir yorum eklememi istiyor. Nasıl devam edeceğimi veya çıkacağımı bilmiyorum. Ortalığı karıştırmak istemiyorum bu yüzden ctrl + Z yaptım ve hiçbir şey yapmadım.

Lütfen kullanmam gereken komutları özetleyebilir misiniz?

git commit -a 

ve

git push?

1
git commit -acommit mesajı yazmanız için bir düzenleyici açar. Günlük olarak görmek istediğiniz bir mesajı girin ve düzenleyiciden çıkın. Bu, taahhüdü tamamlar. Uzaktan deposuna kullanarak değişikliklerinizi iterek bu takibi git push <remote name> <branch name>gibigit push remote master
Bhaskar

3
Ayrıca, kullanmanız gerekmediğini (ve kullanmamalısınız)sudo
dax

Cevap için teşekkürler. Sudo kullanmazsam izin verilmedi hatası alıyorum.
kishore.

2
Daha önce sudo kullandıysanız, muhtemelen çalışma dizininizde artık yanlışlıkla köke ait olan dosyalarınız vardır. Bu noktada sudo olmadan diğer işlemleri yapmak , root tarafından sahip olunan dosyaları değiştiremeyeceğiniz için izin verilmedi hatasına neden olur. Sizin depo bir dağınıklık biraz olabilir ve onu baştan başlamak iyi olabilir (ve yok sudo kullanın).
Greg Hewgill

tüm dosyaları eklemek istiyorsanız "git add -a" kullanabilirsiniz. Ancak birden fazla seçili dosya eklemek istiyorsanız. `git add -i 'kullanabilirsiniz. lütfen bu git-scm.com/book/en/v2/Git-Tools-Interactive-Staging'e bakın . Bu sana yardım edecek .
Kapila Ranasinghe

Yanıtlar:


120

Yaptığınız tüm değişiklikleri eklemek için:

git add .

Onları işlemek için:

git commit -m "MY MESSAGE HERE" # -m mesaj bayrağıdır

Bu adımları şu şekilde bir araya getirebilirsiniz:

git commit -a -m "MY MESSAGE HERE"

Kesin değişikliklerinizi yerel deponuzdan uzak deponuza göndermek için:

git push origin master

Bundan sonra github için kullanıcı adınızı / şifrenizi yazmanız gerekebilir. İşte budala kullanma konusunda iyi bir astar. Biraz eski ama neler olup bittiğini çok iyi kapsıyor.


Will -aişlemeden önce yeni (unstaged) dosyaları eklemek?
SabreWolfy

git commit -akısaltmasıdır git commit --all, bu yüzden evet olacak.
dax

1
$ man git-commitşunu içerir -a: "Değiştirilen ve silinen dosyaları otomatik olarak aşamalandırmasını komuta söyle, ancak Git'e bahsetmediğiniz yeni dosyalar etkilenmez.", bu yüzden sordum.
SabreWolfy


383

git addKomutu ve ardından boşlukla ayrılmış dosya adları listesini kullanın . Diğer dizinlerdeyse yolları dahil edin, örn directory-name/file-name.

git add file-1 file-2 file-3

1
Yalnızca dosya adını belirtmek bu hatayı verir "ölümcül: pathspec 'dosyaadı.java' hiçbir dosyayla eşleşmedi". Bunun yerine tüm dosya yolunu ve dosya adını şu şekilde belirtin: 'git add long / path / {file1, file2, ..., filen}'
Shravan Ramamurthy

4
Bu, dosya adlarından biri 1.9.5 git ile bir boşluk içerdiğinde çalışmaz
Maxime Helen

Bundan "<" ve ">" yi kaldırmamız gerekiyor. Bu birinin kafasını karıştırır.
Saeed Entezari

benim için çok yardımcı oldu
Jesús Sánchez

30

Bazılarının da bahsettiği gibi, olası bir yol git etkileşimli evreleme kullanmaktır . Farklı uzantılara sahip dosyalarınız olduğunda bu harika

$ git add -i
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

*** Commands ***
  1: status     2: update      3: revert     4: add untracked
  5: patch      6: diff        7: quit       8: help
What now>

Eğer basarsanız 2 o zaman entermevcut dosyaların bir listesini alacak eklenecek:

What now> 2
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

Şimdi biz eklemek istedim eğer öyleyse, eklemek istediğiniz dosya sayısını eklemek için gereken sadece TODOve index.htmlbiz yazarsınız1,2

Update>> 1,2
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

* Numaranın önünü görüyor musun? bu, dosyanın eklendiği anlamına gelir.

Şimdi 7 dosyanız olduğunu ve bunların 7.'si dışında hepsini eklemek istediğinizi düşünün. Elbette yazabiliriz 1,2,3,4,5,6ama 7 yerine 16 olduğumuzu hayal edin, bu oldukça zahmetli olur, iyi bir şey hepsini yazmamız gerekmez çünkü yazarak aralıkları kullanabiliriz1-6

Update>> 1-6
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
* 3:    unchanged        +5/-1 lib/simplegit.rb
* 4:    unchanged        +5/-1 file4.html
* 5:    unchanged        +5/-1 file5.html
* 6:    unchanged        +5/-1 file6.html
  7:    unchanged        +5/-1 file7.html
Update>>

Birden fazla aralık bile kullanabiliriz, bu nedenle 1'den 3'e ve 5'ten 7'ye kadar istiyorsak şunu yazıyoruz 1-3, 5-7:

Update>> 1-3, 5-7
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
* 3:    unchanged        +5/-1 lib/simplegit.rb
  4:    unchanged        +5/-1 file4.html
* 5:    unchanged        +5/-1 file5.html
* 6:    unchanged        +5/-1 file6.html
* 7:    unchanged        +5/-1 file7.html
Update>>

Bunu ayrıca, eğer yazarsak dosyaları unstage yapmak için de kullanabiliriz -number, bu yüzden 1 numaralı dosyanın aşamalarını çözmek istersek şunu yazardık -1:

Update>> -1
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
* 3:    unchanged        +5/-1 lib/simplegit.rb
  4:    unchanged        +5/-1 file4.html
* 5:    unchanged        +5/-1 file5.html
* 6:    unchanged        +5/-1 file6.html
* 7:    unchanged        +5/-1 file7.html
Update>>

Ve tahmin edebileceğiniz gibi, bir dizi dosyanın aşamalarını da çözebiliriz, bu nedenle -range, bu aralıktaki tüm dosyaları yazarsak, aşamasız olacaktır. 5'ten 7'ye kadar tüm dosyaların aşamalarını kaldırmak isteseydik şunu yazardık -5-7:

Update>> -5-7
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
* 3:    unchanged        +5/-1 lib/simplegit.rb
  4:    unchanged        +5/-1 file4.html
  5:    unchanged        +5/-1 file5.html
  6:    unchanged        +5/-1 file6.html
  7:    unchanged        +5/-1 file7.html
Update>>

2
şahsen bu yolu seviyorum. İşlemeniz gereken daha fazla dosyanız ve diğer işlemleriniz olduğunda kullanımı kolaydır.
Kapila Ranasinghe

Bitirdikten sonra, interaktif sahnelemeyi nasıl bitirirsiniz?
Crparedes

1
@Crparedes, dosyaları ekledikten sonra tekrar enter tuşuna basarsanız menüye geri döner, ardından 7etkileşimli aşamadan çıkma seçeneğini seçmeniz gerekir .
Fabio Antunes

28

Bunun gibi birden çok dosya da seçebilirsiniz

git add folder/subfolder/*

Bu, belirtilen alt klasördeki tüm dosyaları ekleyecektir. Bir grup dosyayı düzenlerken çok kullanışlıdır, ancak yalnızca bazılarını işlemek istiyorsanız ...


14

Belirli bir klasöre birden fazla dosya eklemek istiyorsanız, bunları kullanarak bölebilirsiniz {,}. Bu, uzun yolları tekrar etmemek için harikadır, örneğin

git add long/path/{file1,file2,...,filen}

Arasına boşluk koymamaya dikkat edin ,.


uzun / yol / burada nedir? @EliuX
lalithkumar

long / path çok uzun uzunlukta bir yol dizisi olabilir, bu nedenle böyle bir bölümü cdiçine girmek zorunda kalmadan tekrarlamamak daha rahattır
EliuX

4

Dosyaları değiştirdiğinizde veya arşivde yenilerini eklediğinizde, önce onları aşamalandırmanız gerekir.

git add <file>

ya da hepsini sahnelemek istiyorsan

git add .

Bunu yaparak git'e bir sonraki işleminizde hangi dosyaları istediğinizi söylüyorsunuz. O zaman yaparsın:

git commit -m 'your message here'

Kullan

git push origin master

Burada kaynak, uzak depo dalı ve ana, yerel depo şubenizdir.


Teşekkür ederim!. Son komutta git push origin master. Aslında farklı bir şube adı (ana şubeden oluşturulmuş) üzerinde çalışıyorum. Şube adımı veya menşe yöneticimi girmem gerekiyor mu? Tekrar teşekkürler
kishore.

Sorun değil. :) Evet, şube adlarınızı kullanmalısınız, origin master sadece örnek.
somi

1

Görünüşe göre git, vibir commit mesajı yazabilmeniz için düzenleyicinizi (muhtemelen ) başlatıyor . Eğer aşina değilseniz vi, bunun temellerini öğrenmesi kolay . Alternatifler:

  • git commit -a -m "my first commit message"Komut satırında commit mesajını belirtmek için kullanın (bunu kullanmak bir düzenleyici başlatmaz)

  • EDITOROrtam değişkenini aşina olduğunuz bir düzenleyiciye ayarlayın


Cevap veren herkese çok teşekkürler. Dosyalarımı başarıyla teslim ettim ve ittim.
kishore.

1

Tüm dosyalarınızı Github'da sahnelemek ve teslim etmek istiyorsanız şunları yapın;

git add -A                                                                                
git commit -m "commit message"
git push origin master

0

👉 1. adım .

git init

👉 adım2.

a) tüm dosyalar için

git add -a

b) yalnızca belirli klasör

git add <folder1> <folder2> <etc.>

👉 adım3.

git commit -m "Your message about the commit"

👉 adım4.

görüntü açıklamasını buraya girin

git remote add origin https://github.com/yourUsername/yourRepository.git

👉 adım5 .

git push -u origin master
git push origin master

bu hatayla karşılaşırsan

 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/harishkumawat2610/Qt5-with-C-plus-plus.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

👉 Bu komutu kullanın

git push --force origin master
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.