Yeni eklenen dosyalar da dahil olmak üzere tüm dosyaları tek bir komut kullanarak nasıl sahne alabilir ve uygulayabilirim?


425

Yeni eklenen dosyalar da dahil olmak üzere tüm dosyaları tek bir komut kullanarak nasıl sahne alabilir ve uygulayabilirim?


3
Sinir bozucu şey, bunun mümkün olduğu ve herhangi bir yeni dosya eklemek ve eklemek için standart sözdizimi olmasıydı: git commit -a Ancak form için doğru, git sözdizimi değişti. Mevcut kullanıcıları karıştırdı (ve komut dosyalarını kırdı), kullanışlı işlevselliği ortadan kaldırdı ve gereksiz bir bayrağın yerini aldı.
fijiaaron

1
Git add -A, git command bir komutta bunun bir kopyası var mı? . Kabul edilen cevap, burada kabul edilen cevaba benzer, ancak ilgili yazmayı kısaltmak için bir git takma adı oluşturmayı önerir (ve nasıl yapılacağını gösterir).
Mark Amery

Yanıtlar:


568

mu

git add -A && git commit -m "Your Message"

"tek komut" olarak sayılsın mı?

Aşağıdaki @ thefinnomenon'un cevabına göre düzenleyin :

Bunu almak için şunu git aliaskullanın:

git config --global alias.coa '!git add -A && git commit -m'

ve yeni dosyalar da dahil olmak üzere tüm dosyaları aşağıdakileri içeren bir mesajla gönderin:

git coa "A bunch of horrible changes"

Açıklama ( git addbelgelerden ):

-A, --all, - yoksayma yok

Dizini yalnızca çalışma ağacının dosya eşleşmesi olduğu yerde değil, dizinin zaten bir girdisi olduğu yerde de güncelleştirin. Bu, çalışma ağacıyla eşleştirmek için dizin girdilerini ekler, değiştirir ve kaldırır.

<pathspec>-A seçeneği kullanıldığında hayır verilirse, tüm çalışma ağacındaki tüm dosyalar güncellenir (Git'in eski sürümleri, güncelleştirmeyi geçerli dizine ve alt dizinlerine sınırlamak için kullanılır).


3
taahhüt mesajı ne olacak?
Narendra Jaggi

11
@NarendraJaggi git add -A && git commit -m "Mesajınız"
Dr.jacky

1
biri kendi .sh veya .bat dosyasına koyabilir ve sadece bir komut olarak kullanabilirsiniz. Mesaj param1 olabilir
BlueWizard

Ayrıca .bashrc'nize temel git komutları için kısayollar ekleyebilirsiniz: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' takma ad ga = 'git add' takma ad gck = 'git checkout' takma ad gb = 'git branch' takma ad gl = 'git log' takma ad lcp = 'git format-patch -1 HEAD' takma ad resetToMaster = 'git reset --hard origin / master '
ni3

3
Powershell'de ";" yerine "&&" yazın her iki komutu da çalıştırmak için:git add -A ; git commit -m "Your Message"
Rafael Miceli

415

Bu komut, değiştirilen tüm dosyaları ekler ve işler, ancak yeni oluşturulan dosyaları eklemez .

git commit -am  "<commit message>"

Adam git-commit'den:

   -a, --all
       Tell the command to automatically stage files that have been modified
       and deleted, but new files you have not told Git about are not
       affected.

101
Bu aslında soruyu cevaplamıyor, aslında (cesurca değil), çözüm için aranan anahtar parçalardan birini dışlıyor.
Arunas

6
İzlenmeyen dosyalar eklemez veya işlemez.
b15

3
Ancak "git add -A" ifadesinden sonra işlediğinizde ve kodda küçük bir şeyi değiştirmeyi unuttuğunuzu fark ettiğinizde en tipik durumu kapsar. Aynı taahhüt mesajını sıfırdan birkaç kez yazmaktan nefret ediyorum
KorbenDallas

ama konu başlatıcı TÜM DOSYALAR diyor, bu yüzden bu sayılmaz
Frederick G. Sandalo

Ayrıca .bashrc'nize temel git komutları için kısayollar ekleyebilirsiniz: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' takma ad ga = 'git add' takma ad gck = 'git checkout' takma ad gb = 'git branch' takma ad gl = 'git log' takma ad lcp = 'git format-patch -1 HEAD' takma ad resetToMaster = 'git reset --hard origin / master '
ni3

26

Bu işlevi kullanıyorum:

gcaa() { git add --all && git commit -m "$*" }

Benim zsh yapılandırma dosyasında, ben sadece yapabilirim:

> gcaa This is the commit message

Tüm dosyaları otomatik olarak sahne ve taahhüt etmek.


1
benzeri içinfunction gcaa() { git add --all && git commit -m "$*" && git push }
Damilola

1
@Damilola - bash benzeri ne demek istiyorsun ? cevaptaki sözdizimi
bash'de

Bu güzel, daha önce gibi bir takma ad kullandım gaa && gc -m "my commit"ama bu çok daha güzel ... <bashrc değiştirmek için scurries ..>
andy


24

Bu cevapların neden doğru çözüm olduğuna inandığım şeylerin etrafında dans ettiğinden emin değilim ama burada değdiğim için kullandığım şey:

Bir takma ad oluşturun:

git config --global alias.coa '!git add -A && git commit -m'

Tüm dosyaları ekleyin ve mesaj gönderin:

git coa "A bunch of horrible changes"

NOT: coataahhüt için kısadır ve kalbinizin istediği herhangi bir şeyle değiştirilebilir


1
Bunun dışında hiçbir cevap, bir mesajla hepsini taahhüt etme sürecini başarıyla basitleştirmez.
Seph Reed

2
Bu harika, git aliasyol arıyordu , gerisi sıkıcı.
Qortex

9

Git'e bağlılık, duruma bağlı olarak çok adımlı bir işlem veya bir adım olabilir.

  1. Bu durum, birden çok dosyanızın güncellendiği ve taahhüt etmek istediğiniz yerdir:

    Herhangi bir şey yapmadan önce değiştirilmiş tüm dosyaları eklemelisiniz.

    git add -A
    

    veya

    git add --all
    
  2. Bundan sonra, eklenen tüm dosyaları taahhütlü kullanabilirsiniz

    git commit
    

    bununla birlikte bu taahhüt için mesaj eklemeniz gerekir.


6

Geçerli dalda değişiklikleri saklamak için "hızlı ve kirli" bir yol istiyorsanız, aşağıdaki diğer adı kullanabilirsiniz:

git config --global alias.temp '!git add -A && git commit -m "Temp"'  

Bu komutu çalıştırdıktan sonra git temp, git seçeneğinin geçerli daldaki tüm değişikliklerinizi otomatik olarak "Temp" adlı bir taahhüt olarak işlemesi için yazabilirsiniz . Daha sonra, git reset HEAD~değişiklikleri çalışmaya devam etmek için daha sonra kullanabilirsiniz , böylece bunlar üzerinde çalışmaya devam edebilir veya git commit --amendtaahhüde daha fazla değişiklik ekleyebilir ve / veya uygun bir ad verebilirsiniz.


4

Benim konfigürasyonumda iki takma isim var:

alias.foo=commit -a -m 'none'
alias.coa=commit -a -m

eğer çok tembelsem tüm değişiklikleri taahhüt ederim

git foo

ve sadece hızlı bir taahhütte bulunmak

git coa "my changes are..."

coa "taahhüt et" anlamına gelir


9
"Hiçbiri" diyerek taahhüt mesajları ile dolu bir depo ile çalışmaktan nefret ederdim ve aynı zamanda PR'ları da reddederdim. Ne yazık ki, iyi taahhüt mesajlarına sahip olmanın önemini öğrenmenin tek yolu, uzun zaman önce yazılmış bir şeyi denetlemek için geri dönmeniz gerektiğidir ("bu satır bir hataya neden oluyor ... neden eklenmişti ve her şey değiştirir / kaldırırsam? ").
gregmac

1
"Hiçbiri" olmayan taahhütlerin asla uzun süre kalması amaçlanmamıştır. Normalde kendi özellik dalımı başlatıyorum, mikro taahhütler veriyorum ve birleştirmeden önce onları daha makul bir şeye sıkıştırıyorum. Açıkçası, değiştirilmiş her bir işlev için taahhütte bulunan ve tam bir git git günlüğüne aldırmayan kişilerin buna ihtiyacı yoktur.
SystematicFrank

1
Bu amaçla 'hiçbiri' yerine 'silme' ("devam eden çalışma" nın kısaltması) kullanıyorum ve bu tür taahhütleri sadece özel şubelerime itiyorum.
Sergej Koščejev

Yine de yararsızdır, çünkü sonunda bu "silme" veya "hiçbiri" taahhütleri onu diğer insanların gördüğü bir şubeye dönüştürecek ve mesaj günlüğünü kirletecektir. Eğer itmeden önce tüm taahhütlerinizi eziyorsanız o zaman bu kabul edilebilir olurdu ama aksi halde takım için hala can sıkıcı.
Ürdün

Bu bir ızgara fikridir ve bunu bir sonraki cevapla birleştirerek OP için% 100 doğru cevap alabilirsiniz. Aslında cevabımda gerekli adımları (git-bash kullanarak) belirledim. ( stackoverflow.com/a/43442269/869239 )
VeRo

3

Verilen komutu çalıştırın

git add . && git commit -m "Changes Committed"

Ancak, tek bir komut gibi görünse bile, iki ayrı komut tek tek çalışır. Burada sadece &&onları birleştirirdik. Koşmaktan git add .ve git commit -m "Changes Committed"ayrı olarak çok farklı değil . Birden fazla komutu birlikte çalıştırabilirsiniz, ancak sıralama burada önemlidir. Değişiklikleri aşamalandırma ve kaydetme ile birlikte uzak sunucuya göndermek istiyorsanız, bunu verilen şekilde yapabilirsiniz,

git add . && git commit -m "Changes Committed" && git push origin master

Bunun yerine, diziyi değiştirir ve pushilk sıraya koyarsanız, önce yürütülür ve yalnızca ilk çalıştırıldığı için hazırlama ve işlemden sonra istenen push vermez.

&&ilk komut başarılı geri gelir, veya 0 karşıt bir hata seviyesi zaman hattında ikinci komutu çalıştırır &&IS|| ilk komut başarısız ya da 1 olan bir hata seviyesi ile, ikinci komutu çalıştırır.

Alternatif olarak, oluşturabileceğiniz Alise'e olarakgit config --global alias.addcommit '!git add -a && git commit -m' vegit addcommit -m "Added and commited new files"


2

Harika yanıtlar, ancak tek bir çizgi arıyorsanız, hepsini bir araya getirebilir, takma adlandırabilir ve rahatlığın tadını çıkarabilirsiniz:

git add * && git commit -am "<commit message>"

Tek bir satır ama iki komuttur ve belirtildiği gibi bu komutları diğer adlara takabilirsiniz:

alias git-aac="git add * && git commit -am " (sondaki boşluk önemlidir) çünkü yeni kısa el komutunu parametrelendireceksiniz.

Bu andan itibaren, bu takma adı kullanacaksınız:

git-acc "<commit message>"

Temelde şöyle diyorsunuz:

git, benim için izlenmeyen tüm dosyaları ekle ve bu verilen taahhüt mesajı ile taahhüt.

Umarım Linux kullanırsın, umarım bu yardımcı olur.


0

Yapmak git-commitallistediğiniz şeyi gerçekleştirmek için birkaç git komutunu kullanan küçük bir komut dosyası yazabilirsiniz (Ian Clelland'ın cevabına bakın) .
Bu betiği içindeki herhangi bir yere yerleştirin $PATH. Tarafından arayabilirsinizgit commitall ... çok kullanışlı!

Burada bulundu (soru ve tüm cevaplar maalesef silindi, sadece yüksek itibar ile görülebilir)


Bütün konu iyi bir okuma ... bu yüzden ben bağlantılı ^ ^
tanascius

@Dimitri - ne yazık ki bazı çalışkan insanlar bu yararlı konu silmeye karar verdi. Hala yüksek itibar ile görülebilir, bu yüzden bağlantıyı burada tutuyorum.
tanascius

0

kullanmayı deneyin:

git add . && git commit -m "your message here"
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.