git komutları, ekleme ve gönderme komutları bir arada?


220

Bu üç komutu bir arada kullanmanın bir yolu var mı?

git add .
git commit -a -m "commit" (do not need commit message either)
git push

Bazen sadece bir harfi değiştiriyorum, CSS dolgusu falan. Yine de, değişiklikleri zorlamak için her üç komutu da yazmam gerekiyor. Sadece bir itici olduğum birçok proje var, bu yüzden bu komut harika olurdu!


10
Bir kabuk betiği yazmayı denediniz mi?
Paul


Kodumda çok fazla değişiklik var, css'de bir dolgu veya bir harf vb. Değiştirdiğinizde. İletileri tamamlayın ve tüm bu komutlar çok fazla iş ekler. Bir kabuk betiği denenmedi. Nasıl yapılabilir? Teşekkürler!
Gediminas


2
bir değişikliğin her bir örneği için bir taahhütte bulunuyorsanız, bunu yanlış yaparsınız. komutu sen özelliği bitmiş veya hata çözüldü zaman oluyor do (bu olabilir tek değişiklik)
Mark

Yanıtlar:


236

@ Gavin'nin cevabının derlenmesi:

Lazygit'i takma ad yerine bir işlev yapmak, onu bir argüman iletmenize izin verir. Aşağıdakileri ekledim .bashrc (veya Mac ise .bash_profile):

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

Bu, aşağıdakiler gibi bir taahhüt mesajı vermenizi sağlar:

lazygit "My commit msg"

Tabii ki, hangi uzak yere itileceği veya hangi dalda olduğu gibi daha fazla tartışmayı kabul ederek bunu daha da güçlendirebilirsiniz.


11
Yeniden başlatma gerekmez, sadece "kaynak .bashrc" yapın
Sambit Tripathy

25
kullanabilirsiniz $*yerine $1tırnak yazarak kaydetmek için:lazygit My commit msg
Kai Carver

16
@KaiCarver Güzel düşündü, ama ben şahsen hoşlanmıyorum. Birden çok argüman kullanmanızı engeller ve ayrıca boşluklar tırnak içine alınmış tek bir dize argümanının normal kuralına aykırıdır. Bu benim için ikinci bir doğa (ve birçok geliştiriciyi varsayacağım). Alıntıları bırakmak kirli geliyor.
btse

6
lazygit, gelmiş geçmiş en iyi isim!
user1447414

4
@btse diplomatik biri olmak + Cuma. İşte @KaiCarver önerisini kullanan işlev:function dirtygit() { git add . git commit -a -m "$*" git push }
OnklMaps

84

Dosyama bir takma ad ekledim .gitconfig:

[alias]
    cmp = "!f() { git add -A && git commit -m \"$@\" && git push; }; f"

Kullanımı: git cmp "Long commit message goes here"

Tüm dosyaları ekler, ardından tamamlama mesajı için yorumu kullanır ve başlangıç ​​noktasına doğru iter.

Bence bu daha iyi bir çözüm çünkü taahhüt mesajının ne olduğu üzerinde kontrole sahipsiniz.

Takma da komut satırından tanımlanabilir, bu senin ekler .gitconfig:

git config --global alias.cmp '!f() { git add -A && git commit -m "$@" && git push; }; f'

6
Tam da aradığım şey bu! Mükemmel çalışıyor, teşekkürler! Tam bir sözdizimi referansı veya ayrıntılı bir komut listesi bulamadım. !f() { ... }; fTam olarak ne yapar ? Bu çizginin daha fazla açıklaması cevabı daha da iyi hale getirecektir.
Dmitriy Gamolin

1
@DmitriyDemir İşlevi tanımlar f, sonra çağırır.
Oliver

Gerçekten iyi çalışıyor. git pullBirleşmeleri azaltmak için başlangıca ekledim .
Burhan

1
@Oliver Neden tırnak içinde? Neden bir ünlem işareti var? Sondaki f işlevi çağırıyor mu? "$ @" Nedir?
Philip Rego

@PhilipRego Yanlış Oliver: p
Oliver

53

Ben şüpheleri Wayne Werner ile aynı fikirde olsa da, bu teknik olarak bir seçenek:

git config alias.acp '! git commit -a -m "commit" && git push'

Hangi commitve çalışan bir takma ad tanımlar push. Olarak kullanın git acp. Lütfen bu tür "kabuk" takma adlarının her zaman git deponuzun kökünden çalıştırıldığını unutmayın.

Başka bir seçenek, itme işlemini gerçekleştiren bir post-taahhüt kanca yazmak olabilir.

Bu arada, gerçekten olabilir takma ad kabuk argümanlar geçmektedir. Özel bir tamamlama mesajı iletmek istiyorsanız, şunu kullanın:

git config alias.acp '! acp() { git commit -a -m "$1" && git push ; } ; acp'

(Şüphesiz, şimdi, bir mesaj taahhüt vermek gerekir: git acp "My message goes here!")


@wlz Sadece denedim ve iyi çalışıyor. Tüm dizenin tek tırnak içinde olduğunu unutmayın. gitçıkışları otomatik olarak ekledi (ile işaretlendi git config -e).
Tilman Vogel

Üzgünüm, haklısın :). Doğrudan .gitconfig dosyasını düzenlerim. "\" İle zaten kaçtı.
wlz

2
Bu neden kabul edilen cevap değil? İsteneni yapar. +1.
lucid_dreamer

1
Windows'ta, PowerShell'den çalışmasını sağlamak için çift tırnaklardan kaçmak zorunda kaldım (... \ "$ 1 \" ...)
DReimer

35

Bence git için tasarlanan iş akışını yanlış anlayabilirsiniz. (Yorumda ne demek istediğimi açıklığa kavuşturmak / düzeltmek için git add ., commit -agenellikle aynı amaca hizmet ettiği için - dosyalara önceden eklenmişse henüz sahnelenmemiş herhangi bir değişiklik eklediğiniz için - ihtiyacınız yoktur)

Genellikle böyle bir şey yaparsınız:

# make some changes
$ git commit -a -m "Changed something"
# make some more changes
$ git commit -a -m "Changed something else"

X özelliğini bitirene veya bir durma noktasına gelene kadar veya sadece başkalarının ne yaptığınızı görmesini istediğinize kadar yıkayın, durulayın, tekrarlayın. Sonra yaparsın

$ git push

Git SVN değil - ancak bunu böyle kullanmaya çalıştığınız anlaşılıyor. Buradaki makalenin sonunda bazı kaynaklardan faydalanabilirsiniz.


6
İş akışı hakkında açıklama için +1. Ancak git add .ve git commit -a aynı şey değildir
Gabriele Petronella

5
Açıklama için teşekkürler, ama ne yaptığını bilenler için böyle bir komut olacaksa GIT çökmeyecek ...
Gediminas

4
@Lucas: Deneyimli programcılar size otomatik bir push-push komutu isteyen kişilerin ne yaptıklarını bilmediklerini söyleyecektir. 3 aşamalı kod check-ininin bir nedeni vardır (özellik dallarını kullanıyorsanız, 4 aşamalı).
slebetman

1
@slebetman: Doğru söylemedim. Facebook uygulamaları ile, her değişiklik geliştirme için bile canlı sunucuya dağıtılmalıdır. Yani, bunu yapmak için ayar kancalarımız var. Bir değişiklik yaparsınız, taahhüt eder ve uygulamanızdaki değişikliği görürsünüz. Git ile tek bir değişiklik görmek için eklemeli, sahne almalı ve itmeliyim. Aşırıya kaçmıyor mu?
SenG

1
Evet, ancak kodunuzu test etmek zorunda da değilsiniz. Bir kod yazmalı, test etmeli ve sonra taahhüt etmeli ve zorlamalısınız. Yerel git'in efsanevi kullanımı, bir çeşit çoklu dosya "geri al" işlevselliği sağlamayı taahhüt eder, gerçekte olduğundan efsanede çok daha fazla kullanılır.
Joe Strout

35

Bunu .bash_profile dosyamda kullanıyorum

gitpush() {
    git add .
    git commit -m "$*"
    git push
}
alias gp=gitpush

Gibi çalışır

gp A really long commit message

source ~/.bash_profileTakma adı kaydettikten sonra çalıştırmayı unutmayın .


1
Bunu gerçekten beğendim. ... ve bu yüzden kendi ~ / .bash_profile;) teşekkürlerimi kabul ettim. +1
AO_ 18:17

28

Herhangi bir komutu veya komut grubunu başlatmak için bash komut dosyasını kullanabilir, diğer adı ayarlayabilirsiniz

git commit -am "your message" && git push 

2
Bunu cevaplamak istiyorsanız, lütfen nasıl çalıştığına dair daha fazla yorum ekleyin. Basitçe bir kod dökümü olan cevaplar genellikle iyi alınmaz. Bkz. Nasıl Cevap Verilir .
Heretic Maymun

Bence bu doğru cevap olmalı. Soruyu olabildiğince özlü olarak cevaplarken. Sadece terminale yazın ve işe yarıyor! Bir takma ad eklemek istemiyorsanız, alternatif olarak bir textExpander genişletmesi oluşturmak ve bunu bir tuş birleşimi aracılığıyla tetiklemek olacaktır.
eonist

19

Bash'ta takma ad olarak ayarla:

$ alias lazygit="git add .; git commit -a -m '...'; git push;";

Bunu aramak:

$ lazygit

(Bu takma adı kalıcı hale getirmek için .bashrc veya .bash_profile dosyanıza eklemeniz gerekir)


Kalıcı hale getirmek için bu takma adı .bashrc veya .bash_profile'a eklemeniz gerekir
Gavin

Bu sayfanın açıklamasına yardımcı olabileceğini düşünüyorum: serverfault.com/questions/3743/…
Gavin

17

En basit çözüm:

git commit -a -m "commit" && git push

git add zaten bir -para parametresi içinde bulunur, ancak isterseniz hepsini bağlayabilirsiniz:

git add . && git commit -a -m "commit" && git push

10

Linux / Mac'te, bu çok pratik seçenek de çalışmalıdır

git commit -am "IssueNumberIAmWorkingOn --hit Enter key
> A detail here --Enter
> Another detail here --Enter
> Third line here" && git push --last Enter and it will be there

Yerel olarak oluşturulan yeni bir dal üzerinde çalışıyorsanız , git pushparçayıgit push -u origin branch_name

İşlem mesajınızı sistem editöründe düzenlemek istiyorsanız

git commit -a && git push 

editörü açacak ve mesajı kaydettikten sonra da gönderecektir.


8

Gitu'yu deneyebilirsiniz .

İlk kez (js düğümü kurulmalıdır):

npm install -g git-upload

Daha sonra:

gitu COMMIT_MSG

Bu üç komutu aynı anda vermek.

İyi olan şey, sisteminizi yeniden yüklediğinizde veya bunu farklı bilgisayarlarda yapmak istediğinizde endişelenmenize gerek yoktur ve Dosya değişikliği gerekmez. Bu aynı zamanda farklı platformlarda da çalışır (sadece Linux ve Mac değil, aynı zamanda cmdve gibi komut istemi altında Windows powershell) npmve nodejs( gittabii ki) kurmanız gerekir .


6

Dosya zaten izleniyorsa, çalıştırmanız gerekmez git add, sadece yazabilirsinizgit commit -am 'your message'

Bir taahhüt mesajı yazmak istemiyorsanız, aşağıdaki gibi bir şey yapmayı düşünebilirsiniz

git commit --allow-empty-message -am ''



3

Bu cevapta belirtildiği gibi , bir git takma adı oluşturabilir ve bunun için bir komut kümesi atayabilirsiniz. Bu durumda şöyle olur:

git config --global alias.add-com-push '!git add . && git commit -a -m "commit" && git push'

ve ile kullanın

git add-com-push

1
Bu, önceki yanıtların hiçbirine bir şey eklemez.
BanksySan

Üzgünüm, haklısın. Sanırım Tilman Vogel'in cevabının benimkiyle aynı olduğunu fark etmedim .. Silmem gerekir mi ??
cristianzamar

3

Aşağıdaki satırları içeren gitpush.sh adlı küçük bir komut dosyası yazın ve ~ dizininizi ekleyin.

echo $1
git add .
git commit -m "$1"
git push

Şimdi ~ / .bashrc dosyasına aşağıdaki gibi bir takma ad ekleyin:

alias gitpush='~/gitpush'

Şimdi herhangi bir git deposundan gitpush "mesaj" yazmanız yeterlidir.


2

Bir toplu iş dosyası kullanıyorum:

@ECHO OFF
SET /p comment=Comment:
git add *
git commit -a -m "%comment%"
git push

komut satırından bağımsız değişkenlerde kabul ederseniz probs daha kolay olurdu. i sadece gitmek "lezygit MESAJ" vb oldukça serin!
John Hon

1

Yukarıdaki komut dosyalarıyla ilgili bazı sorunlar var:

shift, $ 1 parametresini "kaldırır", aksi takdirde "push" oku ve "yanlış anlar".

Tavsiyem:

git config --global alias.acpp '! git add -A && branchatu = "$ (git symbolic-ref HEAD 2> / dev / null)" && branchatu = $ {branchatu ## refs / heads /} && git taahhüdü - m "1 $" && shift && git pull -u kökenli $ branchatu && git push -u kökenli $ branchatu '


1

Git commit'in svn benzeri davranışı istediğinizde bunu .gitconfig dosyanızdaki git diğer adlarınızda kullanın

commit = "!f() { git commit \"$@\" && git push; };f"


1

Balık kabuğu kullanıyorsanız (btse'nin cevabını oluşturmak):

Bu dosyayı '~ / .config / fish / function' içine 'quickgit.fish' olarak kaydedin. Varsa dizini oluşturun. '--git-dir = $ PWD / .git' Git komutlarını, işlevi çağırdığımız git projesine karşı çalıştırmamızı sağlar

function quickgit # This is the function name and command we call
    git --git-dir=$PWD/.git add . # Stage all unstaged files
    git --git-dir=$PWD/.git commit -a -m $argv # Commit files with the given argument as the commit message
    git --git-dir=$PWD/.git push # Push to remote
end

Terminali yeniden başlatın, projeye gidin, değişiklik yapın ve şimdi 'quickgit "örnek mesajı"' nı arayabilirsiniz. Değişiklikler şimdi eklenecek, uygulanacak ve zorlanacaktır :).

Ayrıca burada bir Gist olarak bulunabilir: https://gist.github.com/Abushawish/3440a6087c212bd67ce1e93f8d283a69


1

Zaten çok sayıda iyi çözüm var, ancak çalışmak istediğim yol için daha zarif bulduğum bir çözüm:

Yoluma "git-put" adlı bir komut dosyası koydum:

#!/bin/bash
git commit "$@" && git push -u

Bu koşmamı sağlıyor:

git put -am "taahhüt mesajım"

..tüm dosyaları eklemek, işlemek ve itmek için.

(Ben de "-u" ekledim çünkü bu konuyla ilgili olmasa bile yine de bunu yapmak istiyorum. Memba şubesinin her zaman çekilmek üzere ayarlanmış olmasını sağlar.)

Ben bu yaklaşımı seviyorum çünkü aynı zamanda tüm dosyaları eklemeden "git put" ("-a" atla) veya taahhüt etmek geçmek isteyebileceğiniz diğer seçeneklerle kullanmak için izin verir. Ayrıca, "put" kısa bir portmanteau "push" ve "taahhüt"


1

VSCode kullanıyorsanız, basit bir klavye kısayolunda yapmanıza izin veren bu uzantıyı indirebilirsiniz .


1

Mac kullanıyorsanız:

  1. Başlangıç ​​klasörünüze gitmek için "cd ~ /" Terminal Tipini başlatın

  2. Yeni dosyanızı oluşturmak için "touch .bash_profile" yazın.

  3. .Bash_profile dosyasını favori düzenleyicinizle düzenleyin (veya TextEdit'te açmak için "open -e .bash_profile" yazabilirsiniz).

  4. Aşağıdakileri kopyalayıp Dosyaya Yapıştırın:

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

Bundan sonra terminalinizi yeniden başlatın ve tek bir kolay komut ekleyin, uygulayın ve itin, örnek:

lazygit "This is my commit message"

1

MAC VSC kullanıcıları için en iyi kurulum:

1) 'shift + cmd + P' tuşlarına basın ve şunu yazın:

Shell Command: install 'code' command in PATH

ENTER tuşuna basın (bash_profile'a kolayca ulaşmak için kod komutu yüklenir)

2) şimdi çalıştırabilirsiniz: code ~/.bash_profileboş bash_profile dosyasını açmak için

3) oraya yeni bir fonksiyon girin:

function lazygit() {
    git add .
    git commit -m "$*"
    git push
}

4) Şimdi VSC'yi yeniden başlatın

5) bir değişiklik yapın, kaydedin ve lazygit messageüç komutu aynı anda çalıştırmak için yazın


1

MacOS kullanıcıları için:

  1. Terminalinizi veya iTerm2'nizi veya kullandığınız başka bir terminali açın .

  2. Komut ile Kullanıcı profili klasörünüze gidin ~/. .bash_profileDosya için varsayılan klasör :

Kullanıcı klasörü örneği

  1. Tür nano .bash_profileBu komut, .bash_profileterminal - için metin düzenleyiciyi kullanmanın en kolay yolunda belgeyi açar (veya zaten yoksa oluşturur) nano.

  2. Artık dosyada basit bir değişiklik yapabilirsiniz. Terminal isteminizi değiştirmek için bu kod satırlarını yapıştırın:

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

Nano metin düzenleme

  1. Şimdi yazarak değişikliklerinizi kaydedin ve kaydetmek için ctrl + ogeri dön düğmesine basın. Sonra nanoyazarak çıkın ctrl + x.

  2. Şimdi değişikliklerinizi etkinleştirmemiz gerekiyor. Tip source .bash_profile(veya . ~/.bash_profile) ve istemi adını görürsünüz.

  3. İTerm2'de ve olarak Preferences/Profiles/General/Commandayarlanır . Bu nedenle, her macOS yeniden başlatıldıktan sonra manuel olarak yapmanız gerekmez. Login ShellSend text at startsource ~/.bash_profileiTerm 2 tercihleri

Kimlik Bilgileri: https://natelandau.com/my-mac-osx-bash_profile


0

Komut için bu .sh betiğini yaptım

#!/bin/sh
cd LOCALDIRECTORYNAME/  
git config --global user.email "YOURMAILADDRESS"
git config --global user.name "YOURUSERNAME"
git init
git status
git add -A && git commit -m "MASSAGEFORCOMMITS"
git push origin master

0

Soru hangi kabuğu belirtmediğinden, önceki yanıtlara dayanan eshell sürümü. Bu ~ / .emacs.d / eshell / takma kalmış olabilir ben ilk bölümü z eklediğiniz, eshell takma dosyasında gider https://github.com/rupa/z/ bir dizine çabucak seni cd let hangi , geçerli dizininiz ne olursa olsun çalıştırılabilir.

alias census z cens; git add .; git commit -m "fast"; git push

0

~/.bash_profileTek bir komutla eklemek, işlemek ve itmek için ekleyin :

function g() { git commit -a -m "$*"; git push; }

Kullanımı:

g your commit message
g your commit message 'message'

İşleme iletilerinizde noktalı virgül veya parantez kullanamasanız da tırnak işareti gerekmez (tek tırnaklara izin verilir). Bunlardan herhangi birini istiyorsanız, sadece mesajınıza çift tırnak koyun, örneğin:

g "your commit message; (message)"

Mesajınızda bir yorum oluşturmak için şunları yapın:

g "your commit message:
> your note"

Benzer şekilde ekleme ve taahhüt etme işlevi de vardır:

function c() { git add --all; git commit -m "$*"; }

Tam olarak aynı şekilde gçalışır ve aynı kısıtlamalara sahiptir. Sadece cyerine koy . Örneğin

c your commit message

Uzaktan kumandayı itmek için bir takma ad da ekleyebilirsiniz:

alias p='git push'

Kullanımı:

p

Bu 2 harften oluşur cve pgit deponuzla çalışırken kullanabilirsiniz. Ya da gbunun yerine hepsini tek bir harfle kullanabilirsiniz.

Takma adların ve işlevlerin tam listesi: https://gist.github.com/matt360/0c5765d6f0579a5aa74641bc47ae50ac


0

Kapalı Bina lazygitcevap aşağıdaki çözüm iterek önce değişiklikleri doğrulamak için bir kullanıcı kontrolü ekler. İptal edilirse komutları geri alacaktır. Ve tüm bunlar sadece yerel repoda değişiklikler olduğunda olur.

### SAFER LAZY GIT
function lazygit() {
  git add .
  if git commit -a -m "$1"; then
    read -r -p "Are you sure you want to push these changes? [y/N]} " response
    case "$response" in
      [yY][eE][sS]|[yY])
        git push
        ;;
      *)
        git reset HEAD~1 --soft
        echo "Reverted changes."
        ;;
    esac
  fi
}

0

Bu, komut gruplaması için mükemmeldir.

Gruplama Komutları

{ liste; } Kıvrık ayraçlar arasına bir komut listesi yerleştirmek listenin geçerli kabuk bağlamında yürütülmesine neden olur. Alt kabuk oluşturulmaz. Aşağıdaki noktalı virgül (veya yeni satır) gerekir.

legit(){ git add --all; git commit -m "$1"; git push origin master; }
legit 'your commit message here'

1
Taahhüt mesajı arasında boşluk varsa bu işe yaramaz
Rohit

0

Aşağıdaki çalıştırmak istiyorum:

git commit -am "message";git push

Ben komut daha sonra ;değiştirilmesi gerektiğini düşünüyorum &&, çünkü daha sonra git pushsadece önceki komut (lar) hiçbir hata varsa komutu yürütecek .
Tom

0

Ben tembel olurken taahhüt rastgele bir yorum göndermek için şaşırtıcı bu yolo takma ad buldum . Kutunun dışında gerçekten iyi çalışıyor, bu yüzden yapıyorum git yolove tüm değişikliklerim otomatik olarak itiliyor.

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.