Git commit boş bir metin dosyası açar, ne için?


93

Okuduğum tüm Git öğreticilerinde şunları yapabileceğinizi söylüyorlar:

git init
git add .
git commit

Bunu yaptığımda büyük bir metin dosyası açıldı. Öğreticilerin hiçbiri bunu ele almıyor gibi görünüyor, bu yüzden dosyayla ne yapacağımı veya herhangi bir şey varsa ona ne koyacağımı bilmiyorum.

Yanıtlar:


124

Kaydetme mesajını bu metin dosyasına koymanız, ardından kaydedip çıkmanız gerekiyor.

Git'in kullandığı varsayılan metin düzenleyicisini bu komutla değiştirebilirsiniz:

git config --global core.editor "nano"

Nano’yu normalde metin düzenleyicinizi açacak komutla değiştirmeniz gerekir.


15
--globalVarsayılanı değiştirmek için eklemeniz gerekmiyor mu?
Znarkus

4
@Znarkus iyi nokta. Daha fazla bilgi için buraya bakın . Temel olarak, verilen cevap sadece mevcut proje için ayarı değiştirirken --global, mevcut kullanıcı --systemiçin değiştirir ve o bilgisayardaki herkes için değiştirir.
Matt Fenwick

24
Bu cevap iyi bilgiler barındırsa da asıl soruyu ele almıyor.
Adrian Schmidt

5
Soruyu GERÇEKTEN yanıtlayan cevaplardan bazıları olarak bunun neden iki kat olumlu oy aldığını anlamıyorum. Bu değil.
Johan

2
@Johan, Yanılıyorsun, ama buna rastladıktan sonra, bu cevabı son derece yararlı buldum. Ben de oy verdim.
Danation

65

Ben Collins tarafından belirtildiği gibi -m "...", commit'i satır içi yazma argümanı olmadan (kısa olmanızı teşvik ettiği için genellikle kötü bir fikirdir), açılan bu "büyük metin dosyası" commit mesajını yazacağınız bir penceredir. .

Genellikle ilk satıra bir özet yazmanız, bir satırı atlamanız ve ardından altına daha ayrıntılı notlar yazmanız önerilir; bu, taahhüt mesajlarını uygun bir konu satırı ve gövdede yapılan değişikliklerin tam listesi ile e-posta ile göndermek gibi şeyler yapan programlara yardımcı olur.

EDITORKabuk değişkenini değiştirmek yerine, ~/.gitconfigdosyanıza ek satırlar ekleyerek kullanılan düzenleyiciyi de değiştirebilirsiniz :

[core]
    editor = emacs
    excludesfile = /Users/will/.gitignore

Bu ikinci satırın aslında sorununuzla hiçbir ilgisi yok, ama ben onu gerçekten yararlı buluyorum, böylece dosyamı asla, asla bir depoya teslim etmek istemeyeceğimi bildiğim~/.gitignore tüm dosya türleriyle doldurabilirim .


36

Açılan metin dosyası, geçerli kesinleştirme işleminin bir özetidir. Git commit sizi bu dosyaya bırakır, böylece dosyanın en üstüne bir commit mesajı ekleyebilirsiniz. Mesajınızı ekledikten sonra kaydedin ve bu dosyadan çıkın.

Bu komutta ayrıca commit mesajını komut satırına eklemenizi sağlayan bir "-m msg" anahtarı vardır.


Merhaba Lou, ben de GIt'te acemiyim. Bence var olduktan veya metin dosyasını yazıp var olduktan sonra, git aslında aşamalamayı ve henüz yazdığım commit mesajını işlemedi. Öyleyse, yazıp çıktıktan sonra commit yapamazsam mesajı bu metin dosyasına eklemenin anlamı nedir? (yanılmışsam lütfen düzeltin, çok teşekkürler)
SLN

@SLN Anlattığınız senaryo çok net değil. Bir tahminde bulunacağım ve belki de commit için herhangi bir dosya hazırlamamışsınızdır, bu nedenle taahhüt etme girişiminiz hiçbir şey yapmadı. Kaydetmek istediğiniz ilk aşama dosyaları için "git add" kullanın, ardından asıl yürütmeyi gerçekleştirmek için "git commit" öğesini kullanın.
Lou

15

Mac OS X kullanıyorsanız ve BBEdit kullanıyorsanız, bunu commit mesajları için tercih edilen düzenleyici olarak ayarlayabilirsiniz:

git config --global core.editor "bbedit -w"

Düzenleme bittiğinde, dosyayı kaydedip kapatın ve git onu yorumlar için kullanacaktır.


15

Düzenleyicinizin varsayılan olarak vi / vim olduğunu varsayarsak, şunu yazarak commit mesajı düzenleyicisinden çıkabilirsiniz:

:x

kaydetme ve kaydetme mesajı dosyasından çıkma. Ardından normal git komutu bölümüne geri döneceksiniz.

Daha fazla vi komutu:
http://www.lagmonster.org/docs/vi.html


9
Benim gibiyseniz, ekleme / değiştirme modundaydınız (yani commit mesajını yazıyorsunuz). Öyleyse, kaydedip çıkmak için escyazmadan önce komut moduna girmek için tuşuna basmanız :xgerekir.
Martin Carney

1
Tabii ki editörünün varsayılan olarak vi / vim olduğunu varsayarsak. Bu herkes için doğru olmaz. Kesinlikle bu emacs kullanıcısı için değil;)
haziz

Bu beni çok fazla zahmetten kurtardı. Çok teşekkür ederim
Danation

12

Herkesin söylediği gibi, bu sadece commit yorumunuzu eklediğiniz yerdir - ancak bazıları için editör ayarlarınızı yapılandırmadıysanız ve VI'nın ne olduğunun farkında değilseniz, yine de kafa karıştırıcı olabilir : o zaman bir şoka girebilirsiniz. , çünkü hala GIT-Bash'te olduğunuzu düşüneceksiniz

Bu durumda, aslında bir şeyler ile ilgilenmenin bazı ilginç yollarına sahip bir metin düzenleyicisindesiniz ve bu komut dizisi size yardımcı olabilir, böylece ilk işleminizi aşabilir ve sonra aşina olduğunuz bir düzenleyiciyi yapılandırabilir veya nasıl kullanılacağını öğrenmek için bir fırsat.


8
Vi ile bitmenin beni her zaman şok ettiğini biliyorum :)
Will Robertson

1
Artık işler çok daha mantıklı. +1
Matt Ellen

11

-mİşlemeye seçenek, bir girin komut satırında mesaj işlemek sağlar:

git commit -m "my first commit"

7

Yeni bir commit oluşturduğunuzda, git bir metin düzenleyiciyi çalıştırır ve içine bazı şeyler yazar.

Bu metin düzenleyiciyi kullanarak, amaç, hızlı bir şekilde oluşturduğunuz commit ile ilişkilendirilecek commit mesajını yazmanızdır.

Bunu yaptıktan sonra, kaydedin ve metin düzenleyiciden çıkın. Git, yazdıklarınızı kaydetme mesajı olarak kullanacaktır.

Kaydetme mesajının aşağıda açıklanan belirli bir yapısı vardır:

Kaydetme mesajının ilk satırı, mesaj başlığı (veya başlık) olarak kullanılır. Commit başlığının tercih edilen uzunluğu 40 karakterden azdır, çünkü bu, github'ın belirli bir deponun Commits sekmesinde onu kesmeden önce görüntülediği karakter sayısıdır ve bazı insanlar bunu rahatsız edici bulur.

Başlığı oluştururken, ilk kelime için büyük harfle yazılmış şimdiki zaman fiili kullanmak yaygın bir uygulamadır, ancak hiç gerekli değildir.

Bir satırsonu, iletinin başlığını ve gövdesini tanımlar.

Vücut ne istersen oluşabilir. Taahhüdünüzün getirdiği değişikliklere genel bir bakış makul. Bazı üçüncü taraf uygulamaları, çeşitli türden kancaları devreye sokmak için commit mesajlarının gövdesini içeren bilgileri kullanır (iki isim vermek için Gerrit ve Pivotal Tracker düşünüyorum).

İşte kısa ve tatlı bir örnek. Önde gelen #bir yorumu belirtir.

Gitignore index.pyc

Ignore gunicorn generated binary file
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch dev
# Your branch is ahead of 'origin/dev' by 10 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitignore
#

Burada Bay Torvalds, iyi bir taahhüdün ne olduğu konusunda görüş bildiriyor.

Ve burada Tpope da aynı şeyi yapıyor.

Diğer birkaç cevapta da belirtildiği gibi, varsayılan düzenleyiciyi değiştirmek komut satırında tek satırlık bir işlemdir.

Tercihim için:

git config --global core.editor "vim"

2
soru için kabul edilen cevap bu olmalıdır.
mppfiles

6

Mesajınızı yazdıktan sonra Escape'i ve ardından ZZ'yi deneyin. Diğerlerinin de söylediği gibi, bu commit komutunu çalıştırdığınızda, aslında mesajı girmek için bir metin düzenleyicisi çalıştırır. Benim durumumda (OS X), biraz kazı yaptıktan sonra anladığım VI idi. Bu durumda, "komut" moduna (INSERT modunun aksine) girmek için Escape tuşuna basın ve ZZ'yi girin. Eminim görevi yerine getirmenin başka yolları da vardır ama bu benim için yaptı. Hiç VI veya emac kullanmamış olmak benim için hemen anlaşılmıyordu ve kullandığım başlangıç ​​kılavuzlarının hiçbirinde bahsedilmiyordu. Umarım bu yardımcı olur.


4

git commitKomut belirtilen düzenleyici açılacaktır EDITORbir yorum işlemek girebilirsiniz ortam değişkeni. Bir Linux veya BSD sisteminde, herhangi bir editörün çalışması gerekse de, bu varsayılan olarak vi olmalıdır.

Sadece yorumlarınızı girin ve dosyayı kaydedin.


2

Kafam karıştı çünkü VIM'de: w'den sonra bir dosya adı girmeye çalışıyordum. Bu, taahhüdü tetiklemez. Bunun yerine "Boş kaydetme mesajı nedeniyle işleme iptal ediliyor" mesajı almaya devam ettim. : W'den sonra dosya adı koymayın. : w, dosyayı varsayılan olarak .git / COMMIT_EDITMSG olarak kaydeder. Ardından: Kaydetmeyi tamamlamak için çıkmak için q. Git log ile sonuçları görebilirsiniz.


veya kaydetmek ve çıkmak için sadece: x kullanabilirsiniz.
TJ Ellis

2

Editörümü emacs olarak değiştirdiğime göre, her şey yolunda gidiyor.

Ama bunu ayarlamadan önce, "git commit -a" gedit'i açtı, ancak aynı zamanda "Boş commit mesajı nedeniyle iptal ediliyor." Dosyayı gedit'ten kaydetmenin hiçbir etkisi olmadı. Düzenleyicinin açıkça "git config --global core.editor" gedit "" ile ayarlanması aynı sonucu verdi.

Emacs ile ilgili yanlış bir şey yok, ama meraktan neden bu gedit ile çalışmıyor ve onu çalıştırmanın bir yolu var mı?

Teşekkürler.


gedit zaten çalışıyorsa, "gedit file.txt" yapmak dosyayı mevcut pencerede açacak ve hemen geri dönecektir ... bunu özellikle git ile gedit kullanımı hakkında gerçek bir soru olarak göndermelisiniz.
araqnid

6
bununla da karşılaştı. git config --global core.editor "gedit -s"
gedit'i

2

OS XI kullananlar için bu komutun iyi çalıştığını gördü:
git config --global core.editor "open -t -W"

bu, git'i varsayılan metin düzenleyicisini (benim durumumda textedit) açmaya zorlayacak ve ardından uygulamadan çıkmanızı bekleyecektir. Kaydetme işlemi tamamlanmadan önce "Kaydet" ve ardından "Çık" metnini düzenlemeniz gerektiğini unutmayın. Bu sayfada ayrıntılı olarak oynayabileceğiniz birkaç başka komut var:

Apple Developer Library - Komutu Aç

git config --global core.editor "open -e -W"Git, varsayılan düzenleyicinin ne olduğuna bakılmaksızın her zaman textedit'i açmasını istiyorsanız deneyebilirsiniz .


1

Evet, mantıklı bir editör setiniz olduğundan emin olun. Varsayılan düzenleyicinizin ne olacağından emin değilsiniz, ancak benim gibi nano ise (commit yazdıktan sonra üste yakın bir yerde yazacak) sadece bir yorum yazmanız ve bitirmek için Ctrl-x tuşlarına basmanız yeterlidir. Ardından y'ye basın, ardından taahhüdü onaylamak için enter'a basın.

Ayrıca, büyük bir fark listesi yerine işleyeceğiniz dosyaların basit bir listesini görmek istiyorsanız, önceden deneyin

git diff --name-only

1

Revizyon kontrolü yaparken, yaptığınız değişikliğin ne olduğunu her zaman açıklamalısınız. Genellikle ilk kez "İlk Teslim" gibi bir yorumunuz olur.

Ancak uzun vadede her işlem için iyi bir yorum yapmak istersiniz. Şu biçimde bir şey isteyeceksiniz:

Deneysel özellik eklendi x.

X, Z durumunda Y özelliğinin performansını artıracaktır. X'in -x veya --feature-eks anahtarları ile etkinleştirilmesi gerekirse. Bu adresler, 1138 numaralı isteği içerir.


1

Terminal'de de yeni olduğum için "Escape ve sonra ZZ" benim için işe yaradı, bu sorunu aylardır yaşıyorum ve ayrıca bir çözüm bulamadım.

Basit tavsiyeniz için teşekkürler TheGeoff!


0

Aşağıdakiler, muhtemelen tüm değişiklikleri gerçekleştirmenin en kolay yoludur:

git commit -a -m "Type your commit message here..."

Elbette taahhütte bulunmanın çok daha ayrıntılı yolları vardır, ancak bu, başlamanızı sağlamalıdır.

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.