คอมมิตโดยไม่มีข้อความคอมมิต


108

ฉันจะทำการเปลี่ยนแปลงโดยไม่ระบุข้อความคอมมิตได้อย่างไร? เหตุใดจึงต้องมีโดยปริยาย?


6
สุดท้ายgit commit -a --allow-empty-message -m ''จะไม่เปิดโปรแกรมแก้ไขอีกต่อไป ดูคำตอบของฉันด้านล่าง
VonC

2
บน Windows คำสั่งนี้git commit -a --allow-empty-message -m ''ทำให้กระทำด้วยการกระทำข้อความ " ''" git commit -a --allow-empty-message -m ""ดังนั้นจึงเป็นการดีที่จะใช้คำสั่งนี้แทน:
tav

คำตอบ:


138

โดยทั่วไป git ต้องการข้อความที่ไม่ว่างเปล่าเนื่องจากการให้ข้อความยืนยันที่มีความหมายเป็นส่วนหนึ่งของแนวปฏิบัติในการพัฒนาที่ดีและการดูแลพื้นที่เก็บข้อมูลที่ดี บรรทัดแรกของข้อความคอมมิตถูกใช้ทั่วทุกที่ภายในคอมไพล์ สำหรับข้อมูลเพิ่มเติมอ่าน"หมายเหตุเกี่ยวกับ Git Commit ข้อความ"

หากคุณเปิด Terminal.app cdไปยังไดเร็กทอรีโปรเจ็กต์ของคุณและgit commit -am ''คุณจะเห็นว่าล้มเหลวเนื่องจากไม่อนุญาตให้มีข้อความคอมมิตว่าง git เวอร์ชันใหม่กว่ามี
--allow-empty-messageอาร์กิวเมนต์บรรทัดคำสั่งรวมถึงเวอร์ชันของ git ที่รวมอยู่ใน Xcode เวอร์ชันล่าสุด สิ่งนี้จะช่วยให้คุณใช้คำสั่งนี้เพื่อทำการคอมมิตด้วยข้อความว่างเปล่า:

git commit -a --allow-empty-message -m ''

ก่อนที่จะ--allow-empty-messageตั้งค่าสถานะคุณต้องใช้commit-treeคำสั่งประปา คุณสามารถดูตัวอย่างของการใช้คำสั่งนี้ในส่วน "ดิบ Git" บทของหนังสือ Git


1
เวอร์ชันใหม่กว่าgitมี--allow-empty-messageอาร์กิวเมนต์บรรทัดคำสั่ง โปรดดูเอกสารที่นี่ git-commit-treeมันพูดถึงคุณใช้เพื่อให้สามารถที่จะบรรลุในสิ่งเดียวกันโดยใช้คำสั่งการประปา
Jeremy W. Sherman

18
ฉันคิดว่าประโยค "การให้ข้อความแสดงความมุ่งมั่นที่มีความหมายเป็นส่วนหนึ่งของแนวปฏิบัติในการพัฒนาที่ดี" นั้นไม่ถูกต้องใคร ๆ ก็พูดได้ว่าการให้ข้อความแสดงความมุ่งมั่นที่มีความหมายถือเป็นส่วนหนึ่งของแนวปฏิบัติในการพัฒนาที่ดีเนื่องจากข้อความดังกล่าวมีความแตกแยกอยู่ดี - I for one เชื่อว่าข้อมูลน้อยบางครั้งนำไปสู่ความสับสนน้อยลงโดยเฉพาะตั้งแต่คอมไพล์อย่างเห็นได้ชัดเก็บการเปลี่ยนแปลงที่เกิดขึ้นจริงในการเก็บข้อมูลและgit diffจะแสดงบุคคลที่สนใจว่าสิ่งที่กระทำมี, โดยไม่ต้องอาศัยคำอธิบายของมนุษย์เป็นลายลักษณ์อักษร เครื่องจักรควรช่วยเราจากการใช้แรงงานเท่าที่จะทำได้
AMN

2
@amn ฉันเพิ่งเริ่มสงสัยเกี่ยวกับข้อความแสดงความรับผิดชอบที่เขียนมาอย่างดีนับหมื่นข้อความที่ฉันเขียนซึ่งจะไม่มีใครอ่านได้เลย สำหรับฉันตอนนี้คุณค่าของนิสัยนี้คือมันบังคับให้ฉันมองผ่านการเปลี่ยนแปลงเพื่อพยายามอธิบายสิ่งเหล่านี้และบางครั้งก็ทำให้ฉันสังเกตเห็นจุดบกพร่อง คุณพูดถูกแม้ว่า ฉันจะพิจารณาให้ความสำคัญกับรหัสมากขึ้นและให้ความสำคัญกับข้อความน้อยลง
osa

7
Git ไม่ได้ใช้แค่การพัฒนาโค้ดอีกต่อไป เมื่อฉันอัปเดตหน้า GitHub wiki หรือเอกสาร Overleaf LaTeX มักจะไม่มีอะไรจะพูดเพราะฉันกำลังอัปเดตเอกสาร ทุกสิ่งที่มีความหมายเชิงความหมายเกี่ยวกับการเปลี่ยนแปลงนั้นมีอยู่ในส่วนต่าง ฉันพบว่าตัวเองใช้ข้อความของการเปลี่ยนแปลงเป็นข้อความกระทำเอง: ซ้ำซ้อนโดยสิ้นเชิง!
Jim Pivarski

1
@amn บางครั้งผลลัพธ์ของgit diffมันไม่สามารถอธิบายได้ในตัวเองแม้ว่าผู้สื่อสารจะเชื่อก็ตาม
cowlinator

26

และถ้าคุณเพิ่มนามแฝงมันจะดีกว่านี้ใช่ไหม

git config --global alias.nccommit 'commit -a --allow-empty-message -m ""'

ตอนนี้คุณเพิ่งทำ nccommit, nc เพราะไม่มีความคิดเห็นและทุกอย่างควรได้รับการยอมรับ


19

เมื่อดำเนินการอัปเดตโค้ดที่สำคัญหากคุณต้องการจุดปลอดภัยระดับกลางจริงๆคุณอาจทำดังนี้

git commit -am'.'

หรือสั้นกว่า:

git commit -am.

และสิ่งที่ทำ?
fishinear

เพิ่มคอมมิตพร้อมข้อความ "."
สาระ

ผมใช้วิธีนี้เมื่อฉันมีความทรงจำที่แท้จริงของสิ่งที่ฉันใส่ในไม่กระทำและฉันขี้เกียจdiffมันทั้งหมด
TheTechRobo36414519

16

หมายเหตุ: เริ่มต้น git1.8.3.2 (กรกฎาคม 2013) คำสั่งต่อไปนี้ ( กล่าวถึงข้างต้นโดยJeremy W Sherman ) จะไม่เปิดตัวแก้ไขอีกต่อไป:

git commit --allow-empty-message -m ''

ดูการกระทำ 25206778aac776fc6cc4887653fdae476c7a9b5a :

หากระบุข้อความว่างพร้อมตัวเลือก-mgit คอมมิตตัวแก้ไขจะเริ่มทำงาน
เป็นเรื่องที่ไม่คาดคิดและไม่จำเป็น
แทนที่จะใช้ความยาวของสตริงข้อความเพื่อตรวจสอบว่าผู้ใช้ระบุหรือไม่โปรดจำไว้โดยตรงว่ามีการให้ตัวเลือก-mหรือไม่


git 2.9 (มิถุนายน 2016) ปรับปรุงพฤติกรรมข้อความว่าง:

ดูกระทำ 178e814 (6 เมษายน 2016) โดยอดัม Dinwoodie (me-and )
ดูกระทำ 27014cb (7 เมษายน 2016) โดยเจฟฟ์คิง (peff )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 0709261 , 22 เมษายน 2016)

commit: อย่าเพิกเฉยต่อข้อความว่างที่มอบให้โดย -m ''

  • " git commit --amend -m '' --allow-empty-message" แม้ว่าจะดูแปลก แต่ก็เป็นคำขอที่ถูกต้องในการแก้ไขข้อผูกพันที่ไม่มีข้อความเลย
    เนื่องจากการตรวจจับที่ผิดพลาดของการมี-mอยู่ในบรรทัดคำสั่งเราจึงต้องเก็บข้อความบันทึกจากคอมมิตเดิม
  • " git commit -m "$msg" -F file" ควรถูกปฏิเสธไม่ว่า$msgจะเป็นสตริงว่างหรือไม่ แต่เนื่องจากข้อบกพร่องเดียวกันจึงไม่ถูกปฏิเสธเมื่อ$msgว่างเปล่า
  • " git -c template=file -m "$msg"" ควรละเว้นเทมเพลตแม้ว่า$msgจะว่างเปล่า แต่ไม่ได้ใช้และใช้เนื้อหาจากไฟล์เทมเพลตแทน

3

คุณไม่จำเป็นต้องคอมไพล์เพื่อทำสิ่งนี้ให้สำเร็จ การใช้ฟังก์ชันทุบตีอย่างสร้างสรรค์จะช่วยแก้เคล็ดได้ดี หากคุณไม่สนใจข้อความเพียงแค่ตั้งค่าเริ่มต้นและลืมมัน

function gitcom() {
  git commit -m "my default commit message"
}

หากคุณรู้สึกผจญภัยจริงๆคุณสามารถเพิ่มยอมรับและผลักดันด้วยคำสั่งเดียว

function gitzap() {
  git add . && git commit -m "whatevs" && git push $1 $2
}

ซึ่งคุณจะเรียกใช้เป็น

gitzap origin master

คุณยังสามารถเจาะลึกและใช้ parse_git_branch เพื่อช่วยตัวเองในการกดแป้นพิมพ์บางครั้งหรือตั้งค่าเริ่มต้นทั่วไปของ "ต้นกำเนิด" และ "หลัก"


1
คุณช่วยให้รายละเอียดเพิ่มเติมเกี่ยวกับวิธีตั้งค่าฟังก์ชันทุบตีนี้ได้หรือไม่?
adaam

1
สมมติว่าคุณใช้ OSX หรือ Linux คุณสามารถคัดลอกฟังก์ชันเหล่านี้และวางไว้ใน. profile ของคุณได้ (ควรอยู่ในโฟลเดอร์หลักของคุณหากไม่ได้สร้างขึ้นมา) เปิดหน้าต่างคอนโซลใหม่และคำสั่งเหล่านั้นจะพร้อมใช้งานสำหรับคุณ การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับไฟล์เหล่านี้จะทำให้คุณต้องรีเฟรชเซสชัน bash เพื่อให้คุณสามารถเร่งความเร็วได้โดยการเพิ่มนามแฝงต่อไปนี้ให้กับไฟล์นั้น: alias ea = "subl ~ / .profile" # subl คือโปรแกรมแก้ไขข้อความของฉันแทนที่ด้วยไฟล์ของคุณเอง นามแฝง er = "source ~ / .profile" # สิ่งนี้จะรีเซ็ตทันทีเมื่อคุณต้องการเพิ่มทางลัดคุณเพียงพิมพ์ "ea" (แก้ไขนามแฝง) และเพื่อรีเฟรช er
Steven Garcia

2
ถ้าคุณเรียกว่าสคริปต์git-comและgit-zap(ไม่มีนามสกุล) และวางไว้ที่ไหนสักแห่งที่คอมไพล์สามารถหาพวกเขา (คือที่ไหนสักแห่งในเส้นทางของคุณ) ถือว่าคอมไพล์พวกเขาเช่นคำสั่งคอมไพล์ปกติและคุณสามารถเรียกพวกเขาเช่นนี้git com,git zap origin master
Manuzor

1
ทุบตีมันเป็นอย่างใดอย่างหนึ่งfunction gitcom {หรือgitcom() {TMK แก้ไข?

2

Git ต้องการคอมมิตเพื่อแสดงความคิดเห็นมิฉะนั้นจะไม่ยอมรับการคอมมิต

คุณสามารถกำหนดค่าเทมเพลตเริ่มต้นโดยใช้ git เป็นข้อความคอมมิตเริ่มต้นหรือค้นหาแฟล็ก --allow-empty-message ใน git ฉันคิดว่า (ไม่แน่ใจ 100%) คุณสามารถกำหนดค่า git ใหม่เพื่อยอมรับข้อความคอมมิตว่าง (ซึ่งไม่ใช่ความคิดที่ดี) โดยปกติการกระทำแต่ละครั้งควรเป็นงานเล็กน้อยซึ่งอธิบายไว้ในข้อความของคุณ


1
ไม่แน่ใจว่าเหตุใดคำตอบนี้จึงถูกโหวตลดลง ฉันยอมรับว่าการบังคับให้ Git ยอมรับข้อความคอมมิตว่างเปล่าหรือใช้ข้อความเช่น "บันทึก" เป็นความคิดที่ไม่ดี หยุดต่อสู้และเรียนรู้เครื่องมือที่น่ารังเกียจ
Jezen Thomas

2

ฉันมีการกำหนดค่าต่อไปนี้ในโครงการส่วนตัวของฉัน:

git config alias.auto 'commit -a -m "changes made from [device name]"'

ด้วยวิธีนี้เมื่อฉันรีบฉันจะทำ

git auto
git push

และอย่างน้อยฉันก็รู้ว่าคอมมิตทำมาจากอุปกรณ์อะไร


1

ฉันพบวิธีแก้ปัญหาที่ง่ายที่สุด:

git commit -am'save'

นั่นคือทั้งหมดที่คุณจะหลีกเลี่ยงสิ่งที่คอมมิตส่งข้อความ

คุณยังสามารถบันทึกคำชมนั้นลงในการทุบตีหรือสิ่งของอื่น ๆ เพื่อให้ง่ายขึ้น

สมาชิกในทีมของเรามักจะเขียนข้อความเหล่านั้น แต่แทบจะไม่มีใครเห็นข้อความเหล่านั้นอีกเลย

ข้อความคอมมิตเป็นสิ่งที่ฆ่าเวลาอย่างน้อยในทีมของเราดังนั้นเราจึงไม่สนใจมัน


-5

ข้อความคอมมิตเป็นแนวทางปฏิบัติที่ดีที่สุดที่ควรปฏิบัติตลอดเวลา เว้นแต่คุณจะเป็นผู้พัฒนาเพียงรายเดียวและจะไม่มีการเปลี่ยนแปลงในเร็ว ๆ นี้

git commit -a -m 'asdfasdfadsfsdf'

นั่นเป็นเรื่องตลก แต่สำหรับการกระทำเพียงเล็กน้อยคุณต้องทำการส่งการเปลี่ยนแปลงไปยัง heroku (เช่น) มันก็โอเคในอินสแตนซ์ของนักพัฒนาซอฟต์แวร์รายเดียว
coloradoblue
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.