ฉันจะจัดลำดับและยอมรับไฟล์ทั้งหมดรวมถึงไฟล์ที่เพิ่มใหม่โดยใช้คำสั่งเดียวได้อย่างไร


425

ฉันจะจัดลำดับและยอมรับไฟล์ทั้งหมดรวมถึงไฟล์ที่เพิ่มใหม่โดยใช้คำสั่งเดียวได้อย่างไร


3
สิ่งที่น่าผิดหวังคือสิ่งนี้เคยเป็นไปได้และเป็นไวยากรณ์มาตรฐานในการส่งและเพิ่มไฟล์ใหม่ใด ๆ : git กระทำ -a แต่จริงกับรูปแบบไวยากรณ์ git เปลี่ยน มันสับสนผู้ใช้ที่มีอยู่ (และทำลายสคริปต์ของพวกเขา), ตัดการทำงานที่มีประโยชน์และแทนที่ธงที่ไม่จำเป็น
fijiaaron

1
มีการทำซ้ำสิ่งนี้เมื่อgit เพิ่ม -A, คอมไพล์กระทำในคำสั่งเดียว? . คำตอบที่ยอมรับนั้นคล้ายคลึงกับคำตอบที่ยอมรับได้ที่นี่ แต่แนะนำให้สร้างนามแฝงคอมไพล์เพื่อย่อการพิมพ์ที่เกี่ยวข้อง (และแสดงวิธีการทำ)
Mark Amery

สำเนาที่เป็นไปได้ของGit เพิ่มและกระทำในคำสั่งเดียว
Luciano

คำตอบ:


568

ทำ

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

นับเป็น "คำสั่งเดียว" หรือไม่

แก้ไขตามคำตอบของ @ thefinnomenon ด้านล่าง :

ที่จะมีมันเป็นgit aliasใช้:

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

และคอมมิตไฟล์ทั้งหมดรวมถึงไฟล์ใหม่ด้วยข้อความด้วย:

git coa "A bunch of horrible changes"

คำอธิบาย (จากgit addเอกสารประกอบ ):

-A, - ทั้งหมด, - ไม่สนใจ - ลบ

อัปเดตดัชนีไม่เพียง แต่ที่แผนผังการทำงานมีไฟล์ที่ตรงกัน แต่ยังรวมถึงที่ที่ดัชนีมีรายการอยู่แล้ว สิ่งนี้จะเพิ่มปรับเปลี่ยนและลบรายการดัชนีให้ตรงกับแผนผังการทำงาน

หากไม่<pathspec>ได้รับเมื่อใช้ตัวเลือก -A ไฟล์ทั้งหมดในแผนผังการทำงานทั้งหมดจะได้รับการอัปเดต (Git เวอร์ชันเก่าที่ใช้เพื่อ จำกัด การอัปเดตไปยังไดเรกทอรีปัจจุบันและไดเรกทอรีย่อย)


3
สิ่งที่เกี่ยวกับข้อความกระทำ?
Narendra Jaggi

11
@NarendraJaggi git เพิ่ม -A && git กระทำ -m "Your Message"
Dr.jacky

1
หนึ่งสามารถวางไว้ในมันเป็นของตัวเอง. ไฟล์ sh หรือ. bat และเพียงแค่ใช้มันเป็นคำสั่งเดียว ข้อความอาจเป็น param1
BlueWizard

และคุณสามารถเพิ่มทางลัดสำหรับคำสั่ง git พื้นฐานใน. bashrc ของคุณ: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git กระทำ' alias gs = 'git diff' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'บันทึก git' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset - ฮาร์ดกำเนิด / master '
ni3

3
ใน PowerShell แทนที่ "&&" สำหรับ ";" เรียกใช้คำสั่งทั้งสองเช่นนี้git add -A ; git commit -m "Your Message"
ราฟาเอลเซลี

415

คำสั่งนี้จะเพิ่มและกระทำทุกไฟล์ที่แก้ไขแต่ไม่ได้สร้างขึ้นใหม่ไฟล์

git commit -am  "<commit message>"

จากมนุษย์คอมไพล์:

   -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.

101
สิ่งนี้ไม่ได้ตอบคำถามจริง ๆ แล้วโดยเฉพาะอย่างยิ่ง (เป็นตัวหนาไม่น้อยกว่า) แยกหนึ่งในส่วนสำคัญของวิธีการแก้ปัญหาที่ต้องการ
Arunas

6
ไม่เพิ่มหรือคอมมิตไฟล์ที่ไม่ได้ติดตาม
b15

3
แต่ครอบคลุมสถานการณ์ส่วนใหญ่โดยทั่วไปเมื่อคุณส่งมอบหลังจาก "git เพิ่ม -A" และสังเกตว่าคุณลืมที่จะเปลี่ยนสิ่งเล็ก ๆ ในรหัส ฉันเกลียดที่จะเขียนข้อความคอมมิชชันเดียวกันหลายครั้งตั้งแต่เริ่มต้น
KorbenDallas

แต่ตัวเริ่มต้นของเธรดบอกว่าไฟล์ทั้งหมดดังนั้นฉันคิดว่าอันนี้ไม่นับ
Frederick G. Sandalo

และคุณสามารถเพิ่มทางลัดสำหรับคำสั่ง git พื้นฐานใน. bashrc ของคุณ: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git กระทำ' alias gs = 'git diff' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'บันทึก git' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset - ฮาร์ดกำเนิด / master '
ni3

26

ฉันใช้ฟังก์ชั่นนี้:

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

ในไฟล์ zsh config ของฉันดังนั้นฉันสามารถทำได้:

> gcaa This is the commit message

หากต้องการจัดลำดับและยอมรับไฟล์ทั้งหมดโดยอัตโนมัติ


1
สำหรับ bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Damilola

1
@Damilola - คุณหมายถึงอะไรโดยชอบทุบตี ? ไวยากรณ์ในคำตอบนั้นใช้ได้ใน bash เช่นกัน
Eliran Malka

นี้เป็นสิ่งที่ดีฉันก่อนหน้านี้ใช้นามแฝงเช่นgaa && gc -m "my commit"นี้ แต่มันก็ดีกว่า ... <รีบออกไปเปลี่ยน bashrc .. >
andy mccullough

24

หนึ่งซับเวทีไฟล์ทั้งหมด ( การแก้ไข , ลบและใหม่ ) และการกระทำที่มีความคิดเห็น:

git add --all && git commit -m "comment"

http://git-scm.com/docs/git-add
http://git-scm.com/docs/git-commit


สายการบินเดียว แต่ไม่ใช่คำสั่งเดียว (ซึ่งเป็นสิ่งที่ OP ขอ)
Eliran Malka

24

ไม่แน่ใจว่าทำไมคำตอบเหล่านี้เต้นรอบสิ่งที่ฉันเชื่อว่าเป็นทางออกที่ถูกต้อง แต่สำหรับสิ่งที่คุ้มค่าที่นี่คือสิ่งที่ฉันใช้:

สร้างนามแฝง:

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

เพิ่มไฟล์ทั้งหมด & กระทำด้วยข้อความ:

git coa "A bunch of horrible changes"

หมายเหตุ: coaย่อมาจากการกระทำทั้งหมดและสามารถถูกแทนที่ด้วยสิ่งที่หัวใจของคุณต้องการ


1
ไม่มีคำตอบอื่นใดนอกจากนี้ทำให้ขั้นตอนการส่งข้อความทั้งหมดสำเร็จง่ายขึ้น
Seph Reed

2
มันยอดเยี่ยมมากกำลังมองหาgit aliasหนทางที่เหลือนั้นน่าเบื่อ
Qortex

9

การคอมไพล์ด้วยคอมไพล์อาจเป็นกระบวนการหลายขั้นตอนหรือขั้นตอนเดียวขึ้นอยู่กับสถานการณ์

  1. สถานการณ์นี้เป็นที่ที่คุณอัปเดตหลายไฟล์และต้องการคอมมิท:

    คุณต้องเพิ่มไฟล์ที่แก้ไขทั้งหมดก่อนที่จะส่งมอบสิ่งใด ๆ

    git add -A
    

    หรือ

    git add --all
    
  2. หลังจากนั้นคุณสามารถใช้ส่งไฟล์ที่เพิ่มเข้าไปได้ทั้งหมด

    git commit
    

    ด้วยสิ่งนี้คุณต้องเพิ่มข้อความสำหรับการกระทำนี้


6

หากคุณต้องการวิธีที่ "รวดเร็วและสกปรก" ในการซ่อนการเปลี่ยนแปลงในสาขาปัจจุบันคุณสามารถใช้นามแฝงต่อไปนี้:

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

หลังจากรันคำสั่งนั้นคุณสามารถพิมพ์git tempเพื่อให้คอมไพล์ยอมรับการเปลี่ยนแปลงทั้งหมดของคุณไปยังสาขาปัจจุบันโดยอัตโนมัติเป็นคอมมิทที่มีชื่อว่า "Temp" จากนั้นคุณสามารถใช้ในgit reset HEAD~ภายหลังเพื่อ "ยกเลิกการยอมรับ" การเปลี่ยนแปลงเพื่อให้คุณสามารถทำงานต่อได้หรือgit commit --amendเพื่อเพิ่มการเปลี่ยนแปลงเพิ่มเติมในการกระทำและ / หรือให้ชื่อที่เหมาะสม


4

ฉันมีนามแฝงสองตัวใน config ของฉัน:

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

ถ้าฉันขี้เกียจเกินไปฉันก็แค่ยอมรับการเปลี่ยนแปลงทั้งหมดด้วย

git foo

และเพียงแค่ทำอย่างรวดเร็ว

git coa "my changes are..."

coa ย่อมาจาก "กระทำทั้งหมด"


9
ฉันเกลียดที่จะทำงานกับพื้นที่เก็บข้อมูลที่เต็มไปด้วยการส่งข้อความว่า "ไม่มี" และฉันจะปฏิเสธการประชาสัมพันธ์ใด ๆ บนพื้นฐานนั้นเช่นกัน น่าเสียดายที่วิธีเดียวที่คุณสามารถเรียนรู้ถึงความสำคัญของการมีข้อความยืนยันที่ดีคือเมื่อคุณต้องกลับไปตรวจสอบสิ่งที่เขียนเมื่อนานมาแล้ว ("บรรทัดนี้ก่อให้เกิดข้อผิดพลาด ... ทำไมมันถึงเพิ่มด้วย) ผิดปกติถ้าฉันเปลี่ยน / ลบมัน? ")
gregmac

1
ความมุ่งมั่นกับ "ไม่มี" ไม่เคยมีความตั้งใจที่จะอยู่ได้นาน โดยปกติแล้วฉันจะเริ่มสาขาคุณลักษณะของตัวเองทำไมโครกระทำและสควอชพวกเขาเป็นสิ่งที่เหมาะสมมากขึ้นก่อนที่จะผสาน เห็นได้ชัดว่าผู้ที่ทำหน้าที่แก้ไขแต่ละฟังก์ชั่นและไม่สนใจไฟล์บันทึกการคอมไพล์แบบเต็มไม่จำเป็นต้องใช้สิ่งนี้
SystematicFrank

1
ฉันใช้ 'wip' (ย่อมาจาก "งานระหว่างทำ") แทนที่จะเป็น 'none' สำหรับจุดประสงค์นี้และฉันจะผลักดันการกระทำดังกล่าวไปยังสาขาส่วนตัวของฉันเท่านั้น
Sergej Koščejev

มันยังคงไม่ช่วยเหลือเพราะในที่สุดคำสั่ง "wip" หรือ "none" จะทำให้เป็นสาขาที่คนอื่นเห็นและจะทำให้บันทึกข้อความสกปรก หากคุณบีบความมุ่งมั่นของคุณทั้งหมดก่อนที่จะผลักดันนั่นจะเป็นที่ยอมรับ แต่ก็เป็นเรื่องที่น่ารำคาญสำหรับทีม
Jordan

นี่เป็นแนวคิดที่น่ากลัวและเมื่อรวมเข้ากับคำตอบถัดไปคุณจะได้คำตอบที่ถูกต้อง 100% สำหรับ OP จริงๆแล้วฉันได้อธิบายขั้นตอนที่จำเป็น (โดยใช้ git-bash) ในคำตอบของฉัน ( stackoverflow.com/a/43442269/869239 )
VeRo

3

เรียกใช้คำสั่งที่กำหนด

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

อย่างไรก็ตามแม้ว่ามันจะดูเหมือนว่าคำสั่งเดียวมันเป็นสองคำสั่งที่แยกจากกันทำงานหนึ่งโดยหนึ่ง ที่นี่เราเพิ่ง&&รวมเข้าด้วยกัน ไม่แตกต่างจากการวิ่ง git add .และgit commit -m "Changes Committed"แยกกันมาก คุณสามารถเรียกใช้หลายคำสั่งพร้อมกัน แต่ลำดับมีความสำคัญที่นี่ ถ้าคุณต้องการที่จะผลักดันการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์ระยะไกลพร้อมกับการแสดงละครและการกระทำคุณสามารถทำได้ตามที่กำหนด

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

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

&&รันคำสั่งที่สองบนบรรทัดเมื่อคำสั่งแรกกลับมาสำเร็จหรือด้วยระดับข้อผิดพลาดที่ 0 ซึ่งตรงกันข้ามกับ&&คือ||ซึ่งรันคำสั่งที่สองเมื่อคำสั่งแรกไม่สำเร็จหรือมีระดับข้อผิดพลาด 1

หรือคุณสามารถสร้างalise as git config --global alias.addcommit '!git add -a && git commit -m'และใช้เป็นgit addcommit -m "Added and commited new files"


2

คำตอบที่ยอดเยี่ยม แต่ถ้าคุณมองหาสิ่งที่น่าสนใจคุณสามารถต่อเชื่อมนามแฝงและเพลิดเพลินกับความสะดวกสบาย:

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

มันเป็นบรรทัดเดียว แต่มีสองคำสั่งและตามที่กล่าวไว้คุณสามารถนามแฝงคำสั่งเหล่านี้:

alias git-aac="git add * && git commit -am " (ช่องว่างที่ปลายเป็นสิ่งสำคัญ) เนื่องจากคุณกำลังจะกำหนดพารามิเตอร์คำสั่งสั้น ๆ ใหม่

นับจากนี้เป็นต้นไปคุณจะใช้นามแฝงนี้:

git-acc "<commit message>"

คุณบอกว่า:

คอมไพล์เพิ่มไฟล์ที่ไม่ได้ติดตามทั้งหมดให้กับฉันและคอมมิทด้วยข้อความคอมมิทที่ได้รับนี้

หวังว่าคุณจะใช้ Linux หวังว่านี่จะช่วยได้


0

คุณสามารถเขียนสคริปต์ขนาดเล็ก (ดูคำตอบของ Ian Clelland) ที่เรียกว่าgit-commitallซึ่งใช้คำสั่ง git หลายคำเพื่อดำเนินการในสิ่งที่คุณต้องการ วางสคริปต์นี้ในทุกที่ของคุณของคุณ
$PATHคุณสามารถเรียกมันได้โดยgit commitall... มีประโยชน์มาก!

พบที่นี่ (คำถามและคำตอบทั้งหมดถูกลบ แต่น่าเสียดายที่มีชื่อเสียงสูงเท่านั้น)


กระทู้ทั้งหมดเป็นหนังสือที่ดี ... นั่นเป็นเหตุผลที่ฉันเชื่อมโยงมัน ^^
tanascius

@Dimitri - น่าเสียดายที่มีคนตัดสินใจที่จะลบกระทู้ที่มีประโยชน์นี้ มันยังคงมองเห็นได้ด้วยชื่อเสียงระดับสูงดังนั้นฉันจึงเก็บลิงค์ไว้ที่นี่
tanascius

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