Bagaimana saya bisa membuat stage dan mengkomit semua file, termasuk file yang baru ditambahkan, menggunakan satu perintah?

425

Bagaimana saya bisa membuat stage dan mengkomit semua file, termasuk file yang baru ditambahkan, menggunakan satu perintah?

Anantha Kumaran
sumber
3
Yang membuat frustasi adalah bahwa ini dulunya mungkin dan merupakan sintaks standar untuk melakukan dan menambahkan file baru: git commit -a Tetapi benar untuk membentuk, sintaks git berubah. Ini membingungkan pengguna yang ada (dan merusak skrip mereka), menghilangkan fungsionalitas yang berguna, dan mengganti bendera yang tidak perlu.
fijiaaron
1
Ada duplikat dari ini di git add -A, git commit dalam satu perintah? . Jawaban yang diterima di sana mirip dengan jawaban yang diterima di sini, tetapi menyarankan untuk membuat alias git untuk mempersingkat pengetikan yang terlibat (dan menunjukkan cara melakukannya).
Mark Amery
Kemungkinan duplikat dari Git tambahkan dan komit dalam satu perintah
Luciano

Jawaban:

568

Apakah

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

dihitung sebagai "perintah tunggal"?

Edit berdasarkan jawaban thefinnomenon di bawah ini :

Untuk menjadikannya sebagai git alias, gunakan:

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

dan komit semua file, termasuk file baru, dengan pesan dengan:

git coa "A bunch of horrible changes"

Penjelasan (dari git adddokumentasi ):

-A, --all, --no-abaikan-penghapusan

Perbarui indeks tidak hanya di mana pohon yang bekerja memiliki file yang cocok tetapi juga di mana indeks sudah memiliki entri. Ini menambah, memodifikasi, dan menghapus entri indeks agar sesuai dengan pohon kerja.

Jika tidak <pathspec>diberikan ketika opsi -A digunakan, semua file di seluruh pohon kerja diperbarui (Git versi lama digunakan untuk membatasi pembaruan ke direktori saat ini dan subdirektori).

Ian Clelland
sumber
3
bagaimana dengan pesan komit?
Narendra Jaggi
11
@NarendraJaggi git add -A && git commit -m "Pesan Anda"
Dr.jacky
1
orang bisa meletakkannya di file .sh atau .bat itu sendiri dan gunakan saja sebagai satu perintah. Pesannya mungkin param1
BlueWizard
Dan Anda juga dapat menambahkan pintasan untuk perintah git dasar di .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git ulang - git reset - asal asalnya / master '
ni3
3
Di PowerShell, ganti "&&" untuk ";" untuk menjalankan kedua perintah, seperti ini:git add -A ; git commit -m "Your Message"
Rafael Miceli
415

Perintah ini akan menambah dan mengkomit semua file yang dimodifikasi, tetapi bukan file yang baru dibuat .

git commit -am  "<commit message>"

Dari man git-commit:

   -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.
Jai Keerthi
sumber
101
Ini sebenarnya tidak menjawab pertanyaan, bahkan secara spesifik (dicetak tebal) mengecualikan salah satu bagian kunci dari solusi yang dicari.
Arunas
6
Tidak menambah atau melakukan file yang tidak terlacak.
B15
3
Tapi itu mencakup situasi paling umum ketika Anda melakukan setelah "git add -A" dan perhatikan bahwa Anda lupa mengubah sesuatu yang kecil dalam kode. Saya benci menulis pesan komit yang sama beberapa kali dari awal
KorbenDallas
tetapi thread starter mengatakan SEMUA FILE, jadi, saya pikir ini tidak masuk hitungan
Frederick G. Sandalo
Dan Anda juga dapat menambahkan pintasan untuk perintah git dasar di .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git ulang - git reset - asal asalnya / master '
ni3
26

Saya menggunakan fungsi ini:

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

Dalam file konfigurasi zsh saya, jadi saya bisa melakukan:

> gcaa This is the commit message

Untuk secara otomatis mengatur dan mengkomit semua file.

phlppn
sumber
1
untuk bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Damilola
1
@ Damilola - apa yang Anda maksud dengan bash-like ? sintaks dalam jawaban bekerja di bash juga
Eliran Malka
ini bagus, saya sebelumnya menggunakan alias seperti gaa && gc -m "my commit"tapi ini jauh lebih bagus ... <bergegas untuk mengubah bashrc ..>
andy mccullough
24

Tidak yakin mengapa jawaban ini semua menari di sekitar apa yang saya yakini sebagai solusi yang tepat tetapi untuk apa nilainya di sini adalah apa yang saya gunakan:

Buat alias:

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

Tambahkan semua file & komit dengan pesan:

git coa "A bunch of horrible changes"

CATATAN: coakependekan dari commit semua dan dapat diganti dengan apa pun yang diinginkan hati Anda

thefinnomenon
sumber
1
Tidak ada jawaban selain ini berhasil menyederhanakan proses melakukan semua dengan pesan.
Seph Reed
2
Ini luar biasa, sedang mencari git aliasjalan, sisanya membosankan.
Qortex
9

Komit di git dapat berupa proses beberapa langkah atau satu langkah tergantung pada situasinya.

  1. Situasi ini adalah tempat Anda memiliki banyak file yang diperbarui dan ingin melakukan:

    Anda harus menambahkan semua file yang dimodifikasi sebelum Anda melakukan apa pun.

    git add -A
    

    atau

    git add --all
    
  2. Setelah itu Anda bisa menggunakan komit semua file yang ditambahkan

    git commit
    

    dengan ini Anda harus menambahkan pesan untuk komit ini.

Raja Linux
sumber
6

Jika Anda hanya ingin cara "cepat dan kotor" untuk menyimpan perubahan pada cabang saat ini, Anda dapat menggunakan alias berikut:

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

Setelah menjalankan perintah itu, Anda cukup mengetik git tempagar git secara otomatis mengkomit semua perubahan Anda ke cabang saat ini sebagai komit bernama "Temp". Kemudian, Anda dapat menggunakan git reset HEAD~nanti untuk "tidak berkomitmen" pada perubahan sehingga Anda dapat terus mengerjakannya, atau git commit --amenduntuk menambahkan lebih banyak perubahan pada komit dan / atau memberikannya nama yang tepat.

Ajedi32
sumber
4

Saya memiliki dua alias dalam konfigurasi saya:

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

jika saya terlalu malas saya hanya melakukan semua perubahan dengan

git foo

dan hanya untuk melakukan komit cepat

git coa "my changes are..."

coa singkatan dari "commit all"

SystematicFrank
sumber
9
Saya benci bekerja dengan repositori yang berisi pesan komit yang mengatakan "tidak ada", dan saya akan menolak PR apa pun atas dasar itu juga. Sayangnya, satu-satunya cara Anda dapat mempelajari pentingnya memiliki pesan komit yang baik adalah ketika Anda harus kembali untuk mengaudit sesuatu yang sudah lama ditulis ("baris ini menyebabkan bug ... mengapa itu ditambahkan, dan apakah akan ada lagi rusak jika saya mengubah / menghapusnya? ").
gregmac
1
Komitmen dengan "tidak ada" tidak pernah dimaksudkan untuk tinggal lama. Biasanya saya memulai cabang fitur saya sendiri, melakukan micro commit dan memencetnya menjadi sesuatu yang lebih masuk akal sebelum bergabung. Jelas orang yang melakukan untuk setiap fungsi yang dimodifikasi dan tidak keberatan log git penuh tidak perlu ini.
SystematicFrank
1
Saya menggunakan 'wip' (kependekan dari "work in progress") alih-alih 'tidak ada' untuk tujuan ini dan saya hanya mendorong komitmen tersebut ke cabang pribadi saya.
Sergej Koščejev
Itu masih tidak membantu, karena pada akhirnya komitmen "penghapusan" atau "tidak ada" itu akan membuatnya menjadi cabang yang dilihat orang lain, dan akan mencemari log pesan. Jika Anda menekan semua komitmen Anda sebelum mendorong, itu bisa diterima, tetapi jika tidak, hal itu tetap mengganggu bagi tim.
Jordan
Ini adalah ide parut, dan dengan menggabungkannya dengan jawaban berikutnya Anda benar-benar bisa mendapatkan jawaban akurat 100% untuk OP. Saya sebenarnya menguraikan langkah-langkah yang diperlukan (menggunakan git-bash) dalam jawaban saya. ( stackoverflow.com/a/43442269/869239 )
VeRo
3

Jalankan perintah yang diberikan

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

Namun, bahkan jika itu tampak satu perintah, itu adalah dua perintah terpisah yang berjalan satu per satu. Di sini kita biasa &&menggabungkannya. Ini tidak jauh berbeda dengan menjalankan git add .dan git commit -m "Changes Committed"secara terpisah. Anda dapat menjalankan banyak perintah secara bersamaan tetapi mengurutkannya penting di sini. Bagaimana jika Anda ingin mendorong perubahan ke server jauh bersamaan dengan pementasan dan komit, Anda bisa melakukannya seperti yang diberikan,

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

Sebaliknya, jika Anda mengubah urutan dan menempatkan pushke pertama, Itu akan dieksekusi terlebih dahulu dan tidak memberikan dorongan yang diinginkan setelah pementasan dan komit hanya karena sudah berjalan terlebih dahulu.

&&menjalankan perintah kedua pada baris ketika perintah pertama kembali dengan sukses, atau dengan tingkat kesalahan 0. Kebalikan dari &&adalah|| , yang menjalankan perintah kedua ketika perintah pertama tidak berhasil, atau dengan tingkat kesalahan 1.

Atau, Anda dapat membuat alise as git config --global alias.addcommit '!git add -a && git commit -m'dan menggunakannya sebagaigit addcommit -m "Added and commited new files"

Kiran Maniya
sumber
2

Jawaban yang bagus, tetapi jika Anda mencari garis menghanguskan melakukan semua, Anda dapat menyatukan, alias dan menikmati kenyamanan:

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

Ini adalah satu baris tetapi dua perintah, dan seperti yang disebutkan Anda dapat alias perintah ini:

alias git-aac="git add * && git commit -am " (ruang di bagian akhir penting) karena Anda akan membuat parameter pada perintah short hand yang baru.

Mulai saat ini, Anda akan menggunakan alias ini:

git-acc "<commit message>"

Anda pada dasarnya mengatakan:

git, tambahkan untuk saya semua file yang tidak terlacak dan komit dengan pesan komit yang diberikan ini.

Semoga Anda menggunakan Linux, harap ini membantu.

VeRo
sumber
0

Anda dapat menulis skrip kecil (lihat jawaban Ian Clelland) yang disebut git-commitallyang menggunakan beberapa perintah git untuk melakukan apa yang ingin Anda lakukan.
Tempatkan skrip ini di mana pun Anda berada di $PATH. Anda dapat menyebutnya dengan git commitall... sangat berguna!

Ditemukan di sini (pertanyaan dan semua jawaban sayangnya dihapus, hanya terlihat dengan reputasi tinggi)

tanascius
sumber
Seluruh utas merupakan bacaan yang bagus ... itu sebabnya saya menautkannya ^^
tanascius
@ Dimitri - sayangnya beberapa orang yang masih belajar memutuskan untuk menghapus utas bermanfaat ini. Itu masih terlihat dengan reputasi tinggi, jadi saya menyimpan tautannya di sini.
tanascius
0

coba gunakan:

git add . && git commit -m "your message here"
Foton
sumber