git tambah, komit, dan dorong perintah dalam satu?

220

Apakah ada cara untuk menggunakan ketiga perintah ini dalam satu?

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

Terkadang saya mengubah hanya satu huruf, padding CSS atau sesuatu. Namun, saya harus menulis ketiga perintah untuk mendorong perubahan. Ada banyak proyek di mana saya hanya satu pendorong, jadi perintah ini akan luar biasa!

Gediminas
sumber
10
Sudahkah Anda mencoba menulis skrip shell?
Paul
Ada banyak perubahan dalam kode saya, ketika Anda mengubah hanya padding di css, atau satu huruf dan lain-lain. Pesan komit dan semua perintah ini menambah banyak pekerjaan. Belum mencoba skrip shell. Bagaimana itu bisa dilakukan? Terima kasih!
Gediminas
2
"(tidak perlu pesan komit juga)" images.wikia.com/dragonball/images/a/a7/Facepalm_227785.jpg
Ajedi32
2
jika Anda melakukan komit untuk setiap contoh perubahan, Anda salah melakukannya. lakukan perintah ketika fitur Anda selesai atau bug dipecahkan (ini bisa menjadi satu perubahan)
Tandai

Jawaban:

234

Membangun dari jawaban @ Gavin:

Menjadikan lazygit suatu fungsi alih-alih sebuah alias memungkinkan Anda menyampaikan argumen. Saya telah menambahkan yang berikut ini ke .bashrc saya (atau .bash_profile if Mac):

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

Ini memungkinkan Anda untuk memberikan pesan komit, seperti

lazygit "My commit msg"

Tentu saja Anda dapat menambahkan ini lebih banyak dengan menerima lebih banyak argumen, seperti tempat yang jauh untuk mendorong, atau cabang mana.

btse
sumber
10
Restart tidak diperlukan, cukup lakukan "source .bashrc"
Sambit Tripathy
25
bisa menggunakan $*alih-alih $1menyimpan mengetikkan kutipan:lazygit My commit msg
Kai Carver
16
@ KaiCarver Pemikiran yang bagus, tetapi secara pribadi saya tidak menyukainya. Ini mencegah Anda dari menggunakan beberapa arg, dan juga bertentangan dengan konvensi normal dari string tunggal arg dengan spasi yang dibungkus dengan tanda kutip. Ini adalah sifat kedua saya pada saat ini (dan saya akan menganggap banyak pengembang). Meninggalkan tanda kutip terasa kotor.
btse
6
lazygit, nama terbaik yang pernah ada!
user1447414
4
@ jadikan saya orang yang diplomatis + ini hari Jumat. Berikut adalah fungsi menggunakan saran @KaiCarver: function dirtygit() { git add . git commit -a -m "$*" git push }
OnklMaps
84

Saya akhirnya menambahkan alias ke .gitconfigfile saya :

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

Pemakaian: git cmp "Long commit message goes here"

Tambahkan semua file, lalu gunakan komentar untuk pesan komit dan dorong ke tempat asalnya.

Saya pikir ini solusi yang lebih baik karena Anda memiliki kontrol atas apa pesan komit itu.

Alias ​​juga dapat didefinisikan dari baris perintah, ini menambahkannya ke Anda .gitconfig:

git config --global alias.cmp '!f() { git add -A && git commit -m "$@" && git push; }; f'
kapasitas gila
sumber
6
Itulah tepatnya yang saya cari! Berfungsi dengan sempurna, terima kasih! Saya tidak dapat menemukan referensi sintaksis lengkap atau daftar perintah yang terperinci. Apa !f() { ... }; fyang tepatnya dilakukan? Penjelasan lebih lanjut tentang kalimat itu akan membuat jawabannya menjadi lebih baik.
Dmitriy Gamolin
1
@DmitriyDemir Menentukan fungsi f, lalu memanggilnya.
Oliver
Bekerja dengan sangat baik. Saya menambahkan git pullke awal sehingga gabungan berkurang.
Burhan
1
@ Oliver. Mengapa ada dalam tanda kutip? Mengapa ada tanda seru? Apakah f pada akhirnya memanggil fungsi? Apa itu "$ @"?
Philip Rego
@PhilipRego Salah Oliver: p
Oliver
53

Sementara saya setuju dengan Wayne Werner tentang keraguannya, ini secara teknis merupakan opsi:

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

Yang mendefinisikan alias yang berjalan commitdan push. Gunakan sebagai git acp. Perlu diketahui bahwa alias "shell" semacam itu selalu dijalankan dari root repositori git Anda.

Pilihan lain mungkin untuk menulis hook pasca-komit yang melakukan push.

Oh, ngomong-ngomong, Anda memang bisa memberikan argumen untuk alias shell. Jika Anda ingin mengirimkan pesan komit kustom, gunakan:

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

(Tentu saja, sekarang, Anda akan perlu untuk memberikan pesan komit: git acp "My message goes here!")

Tilman Vogel
sumber
@ wlz Saya baru saja mencobanya dan berfungsi dengan baik. Perhatikan bahwa seluruh string berada di dalam tanda kutip tunggal. gitsecara otomatis menambahkan lolos (dicentang dengan git config -e).
Tilman Vogel
Maaf kamu benar :) Saya langsung mengedit file .gitconfig. "Sudah lolos dengan \".
wlz
2
Mengapa ini bukan jawaban yang diterima? Itu melakukan apa yang diminta. +1.
lucid_dreamer
1
Di Windows, saya harus menghindari tanda kutip ganda sekitar $ 1 untuk membuatnya berfungsi dari PowerShell (menggunakan ... \ "$ 1 \" ...)
DReimer
35

Saya pikir Anda mungkin salah mengerti alur kerja yang dirancang untuk git. (Untuk memperjelas / mengoreksi apa yang saya maksud dalam komentar, Anda tidak perlu git add ., sejak itucommit -a biasanya memiliki tujuan yang sama - menambahkan perubahan apa pun yang belum dipentaskan, jika file sudah ditambahkan)

Biasanya Anda akan melakukan sesuatu seperti ini:

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

cuci, bilas, ulangi, sampai Anda selesai fitur X, atau Anda berada di titik berhenti, atau Anda hanya ingin orang lain melihat apa yang telah Anda lakukan. Lalu kamu lakukan

$ git push

Git bukan SVN - tetapi tampaknya Anda mencoba menggunakannya seperti itu. Anda mungkin menemukan beberapa sumber daya di akhir artikel di sini berguna.

Wayne Werner
sumber
6
+1 untuk penjelasan tentang alur kerja. Namun git add .dan git commit -a bukan hal yang sama
Gabriele Petronella
5
Terima kasih atas penjelasannya, tetapi GIT tidak akan runtuh jika akan ada perintah seperti ini untuk mereka yang tahu apa yang mereka lakukan ...
Gediminas
4
@Lucas: programmer yang berpengalaman akan memberi tahu Anda bahwa orang yang meminta perintah push-otomatis tidak tahu apa yang mereka lakukan. Ada alasan untuk checkin kode 3-tahap (jika Anda menggunakan cabang fitur, 4-tahap).
slebetman
1
@slebetman: Saya tidak menjelaskannya dengan benar. Dengan aplikasi Facebook, setiap perubahan harus dikerahkan ke server langsung bahkan untuk pengembangan. Jadi, kami telah menyiapkan kait komit untuk melakukan itu. Anda melakukan perubahan, komit dan lihat perubahan di aplikasi Anda. Dengan git, saya perlu menambahkan, stage kemudian mendorongnya untuk melihat satu perubahan. Bukankah itu terlihat berlebihan?
SenG
1
Ya, tetapi Anda juga tidak perlu berkomitmen untuk menguji kode Anda. Anda harus menulis beberapa kode, mengujinya, lalu komit dan dorong. Penggunaan git lokal yang legendaris berkomitmen untuk menyediakan semacam fungsi "undo" multi-file yang digunakan jauh lebih banyak dalam legenda daripada pada kenyataannya, dalam pengalaman saya.
Joe Strout
35

Saya menggunakan ini di .bash_profile saya

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

Ini dijalankan seperti

gp A really long commit message

Jangan lupa untuk menjalankan source ~/.bash_profilesetelah menyimpan alias.

Rajender Joshi
sumber
1
Saya sangat menyukai ini. ... dan karena itu mengadopsinya ke ~ / .bash_profile; milik saya sendiri; terima kasih .. +1
AO_
28

Anda dapat menggunakan skrip bash, atur alias untuk meluncurkan perintah atau grup perintah apa pun

git commit -am "your message" && git push 
vuhung3990
sumber
2
Jika Anda ingin menjadikan ini sebagai jawaban, silakan tambahkan lebih banyak komentar tentang cara kerjanya. Jawaban yang hanya merupakan dump kode umumnya tidak diterima dengan baik. Lihat Cara Menjawab .
Bidah Monyet
Saya pikir ini harus menjadi jawaban yang benar. Saat itu menjawab pertanyaan sejelas mungkin. Ketikkan saja di terminal dan itu berfungsi! Jika Anda tidak ingin menambahkan alias, alternatifnya adalah dengan hanya membuat perluasan teksExpander dan memicunya melalui kombo-kunci.
eonist
19

Tetapkan sebagai alias di bash:

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

Sebut saja:

$ lazygit

(Untuk menjadikan alias ini permanen, Anda harus memasukkannya dalam .bashrc atau .bash_profile Anda)

Gavin
sumber
Anda perlu menambahkan alias itu ke .bashrc atau .bash_profile untuk menjadikannya permanen
Gavin
Saya pikir halaman ini dapat membantu menjelaskan: serverfault.com/questions/3743/…
Gavin
17

Solusi paling sederhana adalah dengan:

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

git add sudah terkandung dalam -a parameter commit, tetapi jika mau, Anda bisa menghubungkan semuanya:

git add . && git commit -a -m "commit" && git push
michal.jakubeczy
sumber
10

Di Linux / Mac, opsi praktis ini juga bisa digunakan

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

Jika Anda mengerjakan cabang baru yang dibuat secara lokal, gantilah git pushbagian itugit push -u origin branch_name

Jika Anda ingin mengedit pesan komit di editor sistem, maka

git commit -a && git push 

akan membuka editor dan setelah Anda menyimpan pesan itu juga akan mendorongnya.

mcvkr
sumber
8

Anda bisa mencoba gitu .

Untuk pertama kalinya (node ​​js harus diinstal):

npm install -g git-upload

Setelah itu:

gitu COMMIT_MSG

Untuk mengeluarkan tiga perintah sekaligus.

Hal baiknya adalah Anda tidak perlu khawatir ketika Anda menginstal ulang sistem Anda atau ketika Anda ingin melakukan ini pada komputer yang berbeda dan Tidak diperlukan modifikasi file. Ini juga bekerja pada platform yang berbeda (tidak hanya Linux dan Mac, tetapi juga Windows di bawah command prompt seperti cmddan powershell) hanya saja Anda harus menginstal npmdan nodejs( gittentu saja).

Kentang goreng
sumber
6

Jika file sudah dilacak maka Anda tidak perlu menjalankannya git add, Anda cukup menulisgit commit -am 'your message'

Jika Anda tidak ingin menulis pesan komit, Anda mungkin ingin melakukan sesuatu seperti

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

Peter Foti
sumber
4

Hasil ini - Coba ini: Script sederhana satu perintah untuk git add, git commit dan git push

Buka CMD Anda di Windows dan rekatkan jawaban ini

git commit -m "your message" . && git push origin master

Contoh ini tangkapan layar gambar saya: https://i.stack.imgur.com/2IZDe.jpg

Anang Hanafi
sumber
3

Seperti disebutkan dalam jawaban ini , Anda dapat membuat alias git dan menetapkan seperangkat perintah untuk itu. Dalam hal ini, itu akan menjadi:

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

dan menggunakannya dengan

git add-com-push
Cristianzamar
sumber
1
Ini tidak menambahkan apa pun ke jawaban sebelumnya.
BanksySan
Maaf, kamu benar. Saya rasa saya tidak memperhatikan bahwa jawaban Tilman Vogel sama dengan jawaban saya .. Haruskah saya menghapusnya ??
cristianzamar
3

Tulis skrip kecil bernama gitpush.sh dengan baris di bawah ini dan tambahkan direktori ~ Anda.

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

Sekarang tambahkan alias di ~ / .bashrc seperti di bawah ini:

alias gitpush='~/gitpush'

Sekarang dari repositori git cukup tulis "pesan" gitpush.

Vaneet Kataria
sumber
2

Saya menggunakan file batch:

@ECHO OFF
SET /p comment=Comment:
git add *
git commit -a -m "%comment%"
git push
Márcio Souza Júnior
sumber
probs akan lebih mudah jika Anda menerima args dari baris perintah. Saya hanya pergi "lezygit MESSAGE" dll yang cukup keren!
John Hon
1

Ada beberapa masalah dengan skrip di atas:

menggeser "menghapus" parameter $ 1, jika tidak, "tekan" akan membacanya dan "salah paham".

Tip saya:

git config --global alias.acpp '! git add -A && branchatu = "$ (git simbolis-ref KEPALA 2> / dev / null)" && branchatu = $ {branchatu ## ref / kepala /} && git commit - m "$ 1" && shift && git pull -u asal $ branchatu && git push -u asal $ branchatu '

Rubens
sumber
1

Ketika Anda menginginkan perilaku git seperti svn commit, gunakan ini di alias git Anda di .gitconfig Anda

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

Rik van der Heijden
sumber
1

Jika Anda menggunakan kulit ikan (membangun dari jawaban btse):

Simpan file ini dalam '~ / .config / fish / functions' sebagai 'quickgit.fish'. Buat direktori jika tidak ada. '- git-dir = $ PWD / .git' Memastikan bahwa kita menjalankan perintah git terhadap proyek git tempat kita memanggil fungsi

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

Mulai ulang terminal, navigasikan ke proyek, buat perubahan, dan sekarang Anda dapat memanggil 'quickgit "contoh pesan"'. Perubahan sekarang akan ditambahkan, dikomit, dan dorong :).

Juga dapat ditemukan sebagai Intisari di sini: https://gist.github.com/Abushawish/3440a6087c212bd67ce1e93f8d283a69

Abushawish
sumber
1

Sudah ada banyak solusi bagus, tapi inilah solusi yang menurut saya lebih elegan untuk cara saya ingin bekerja:

Saya meletakkan skrip di jalur saya yang disebut "git-put" yang berisi:

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

Itu memungkinkan saya untuk menjalankan:

git put -am "pesan komit saya"

..untuk menambahkan semua file, komit, dan dorong.

(Saya juga menambahkan "-u" karena saya suka melakukan ini, walaupun itu tidak terkait dengan masalah ini. Ini memastikan bahwa cabang hulu selalu diatur untuk menarik.)

Saya suka pendekatan ini karena ini juga memungkinkan untuk menggunakan "git put" tanpa menambahkan semua file (lewati "-a"), atau dengan opsi lain yang mungkin ingin saya sampaikan untuk komit. Juga, "put" adalah portmanteau pendek dari "push" dan "commit"

skiggety
sumber
1

Jika Anda menggunakan VSCode, Anda dapat mengunduh ekstensi ini yang memungkinkan Anda melakukannya dalam satu pintasan keyboard sederhana.

Alfred
sumber
1

Jika Anda menggunakan Mac:

  1. Mulai Terminal Ketik "cd ~ /" untuk pergi ke folder rumah Anda

  2. Ketik "touch .bash_profile" untuk membuat file baru Anda.

  3. Edit .bash_profile dengan editor favorit Anda (atau Anda cukup mengetik "open -e .bash_profile" untuk membukanya di TextEdit).

  4. Salin & Rekatkan di bawah ini ke dalam file:

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

Setelah ini, nyalakan ulang terminal Anda dan cukup tambahkan, komit, dan tekan satu perintah mudah, contoh:

lazygit "This is my commit message"
AdilOoze
sumber
1

Untuk pengguna MAC VSC pengaturan terbaik adalah:

1) tekan 'shift + cmd + P' dan ketik:

Shell Command: install 'code' command in PATH

Tekan ENTER (ini akan menginstal perintah kode untuk mendapatkan bash_profile dengan mudah)

2) sekarang Anda dapat menjalankan: code ~/.bash_profileuntuk membuka bash_profile kosong

3) masukkan fungsi baru di sana:

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

4) sekarang restart VSC

5) melakukan perubahan, simpan dan ketik lazygit messageuntuk menjalankan tiga perintah secara bersamaan

AGrush
sumber
1

Untuk pengguna macOS:

  1. Buka Terminal Anda atau iTerm2 atau terminal lain yang Anda gunakan.

  2. Pindah ke folder Profil pengguna Anda dengan perintah ~/. Ini folder default untuk .bash_profilefile:

Contoh folder pengguna

  1. Ketik nano .bash_profilePerintah ini akan membuka .bash_profiledokumen (atau membuatnya jika belum ada) di editor teks termudah untuk menggunakan terminal - nano.

  2. Sekarang Anda dapat membuat perubahan sederhana ke file. Rekatkan baris kode ini untuk mengubah Terminal Anda:

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

Pengeditan teks nano

  1. Sekarang simpan perubahan Anda dengan mengetik ctrl + odan tekan kembali untuk menyimpan. Lalu keluar nanodengan mengetik ctrl + x.

  2. Sekarang kami perlu mengaktifkan perubahan Anda. Ketik source .bash_profile(atau . ~/.bash_profile) dan perhatikan perubahan prompt Anda.

  3. Di iTerm2 Preferences/Profiles/General/Commanddiatur ke Login ShelldanSend text at start ke source ~/.bash_profile. Jadi Anda tidak perlu membuatnya secara manual setelah setiap macOS restart. preferensi ITerm 2

Kredensial: https://natelandau.com/my-mac-osx-bash_profile

rusakovic
sumber
0

Saya melakukan ini skrip .sh untuk perintah

#!/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
acs
sumber
0

Karena pertanyaan tidak menentukan shell mana, inilah versi eshell berdasarkan jawaban sebelumnya. Ini berlaku di file alias eshell, yang mungkin ada di ~ / .emacs.d / eshell / alias saya telah menambahkan bagian pertama z https://github.com/rupa/z/ yang memungkinkan Anda dengan cepat melakukan cd ke direktori , sehingga ini dapat dijalankan tidak peduli apa direktori Anda saat ini.

alias census z cens; git add .; git commit -m "fast"; git push
בנימן הגלילי
sumber
0

Tambahkan ~/.bash_profileuntuk menambahkan, melakukan dan mendorong dengan satu perintah put:

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

Pemakaian:

g your commit message
g your commit message 'message'

Tidak ada tanda kutip diperlukan meskipun Anda tidak dapat menggunakan titik koma atau tanda kurung dalam pesan komit Anda (tanda kutip tunggal diizinkan). Jika Anda ingin salah satu dari ini, cukup berikan tanda kutip ganda di pesan Anda, misalnya:

g "your commit message; (message)"

Untuk membuat komentar di pesan Anda lakukan:

g "your commit message:
> your note"

Ada juga fungsi untuk menambahkan dan melakukan dengan cara yang sama:

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

Cara kerjanya persis sama yaitu gberfungsi dan memiliki kendala yang sama. Taruh saja csebagai gantinya. Misalnya

c your commit message

Anda juga dapat menambahkan alias untuk mendorong ke remote:

alias p='git push'

Pemakaian:

p

Itu berjumlah 2 huruf, cdan pAnda gunakan saat bekerja dengan repositori git Anda. Atau bisa Anda gunakang untuk melakukan semuanya hanya dengan satu huruf.

Daftar lengkap alias dan fungsi: https://gist.github.com/matt360/0c5765d6f0579a5aa74641bc47ae50ac

Kue wortel
sumber
0

Membangun lazygitjawaban, solusi berikut menambahkan cek pengguna untuk memverifikasi perubahan sebelum mendorong. Ini akan mengembalikan perintah jika dibatalkan. Dan semua itu akan terjadi jika dan hanya jika ada perubahan pada repo lokal.

### 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
}
Matthew Cordaro
sumber
0

Ini sangat cocok untuk pengelompokan perintah.

Perintah Pengelompokan

{daftar; } Menempatkan daftar perintah antara kurung kurawal menyebabkan daftar dieksekusi dalam konteks shell saat ini. Tidak ada subkulit yang dibuat. Tanda titik koma (atau baris baru) diperlukan.

legit(){ git add --all; git commit -m "$1"; git push origin master; }
legit 'your commit message here'
Gothburz
sumber
1
Ini tidak akan berfungsi jika pesan komit memiliki ruang di antaranya
Rohit
0

Saya suka menjalankan yang berikut ini:

git commit -am "message";git push
etoksin
sumber
Saya pikir ;harus diganti dengan &&di perintah Anda, karena nanti akan menjalankan git pushperintah hanya jika tidak ada kesalahan pada perintah sebelumnya (s).
Tom
0

Saya menemukan alias ini yolo luar biasa untuk mengirimkan komentar acak ke komit sementara saya malas. Ini bekerja dengan sangat baik di luar kotak, jadi saya lakukan saja git yolodan semua perubahan saya didorong secara otomatis.

jamescampbell
sumber