Git: เพิ่ม vs push vs กระทำ


115

อะไรคือความแตกต่างระหว่างคอมไพล์add, pushและcommit?

สับสนเล็กน้อยที่มาจาก SVN โดยที่ "อัปเดต" จะ "เพิ่ม" สิ่งต่างๆและคอมมิตทำ "พุช" และจะ "เพิ่ม" ด้วย

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


คำตอบ:


163
  1. git addเพิ่มการแก้ไขไฟล์ของคุณไปยังคิวที่จะมุ่งมั่นในภายหลัง ไฟล์ไม่ถูกคอมมิต

  2. git commitคอมมิตไฟล์ที่ถูกเพิ่มและสร้างการแก้ไขใหม่ด้วยบันทึก ... หากคุณไม่ได้เพิ่มไฟล์ใด ๆ คอมไพล์จะไม่คอมมิตอะไรเลย คุณสามารถรวมการกระทำทั้งสองเข้าด้วยกันได้git commit -a

  3. git push พุชการเปลี่ยนแปลงของคุณไปยังที่เก็บระยะไกล

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

ใส่คำอธิบายภาพที่นี่

git addไม่ได้อยู่ในรูปเนื่องจากวิธีที่แนะนำในการคอมมิตคือการรวมกันgit commit -aแต่คุณสามารถเพิ่ม a git addในบล็อกการเปลี่ยนแปลงเพื่อทำความเข้าใจโฟลว์ได้

ประการสุดท้ายสาเหตุpushที่คำสั่งแยกกันเป็นเพราะgitปรัชญา gitเป็นระบบการกำหนดเวอร์ชันแบบกระจายและไดเร็กทอรีการทำงานภายในของคุณคือที่เก็บของคุณ! การเปลี่ยนแปลงทั้งหมดที่คุณกระทำจะสะท้อนและบันทึกทันที pushใช้เพื่ออัปเดต repo ระยะไกลเท่านั้น (ซึ่งคุณอาจแชร์กับผู้อื่น) เมื่อคุณทำอะไรก็ตามที่คุณกำลังทำอยู่ นี่เป็นวิธีที่เป็นระเบียบในการทำงานและบันทึกการเปลี่ยนแปลงในเครื่อง (โดยไม่มีค่าใช้จ่ายเครือข่าย) และอัปเดตเมื่อคุณต้องการเท่านั้นแทนที่จะเป็นทุกครั้งที่คอมมิต สิ่งนี้ส่งผลทางอ้อมในการคอมมิชชัน / การแยกสาขาได้ง่ายขึ้น ฯลฯ (ทำไมไม่ล่ะคุณเสียค่าใช้จ่ายอะไรบ้าง) ซึ่งนำไปสู่การประหยัดคะแนนมากขึ้นโดยไม่ต้องยุ่งกับที่เก็บ


พุชคอมมิตในเครื่องแล้วจึงพุชไปยังเซิร์ฟเวอร์ระยะไกลหรือไม่หรือต้องคอมมิตก่อนจากนั้นจึงส่งงานไปยังที่เก็บระยะไกล?
Andrew S

2
ก่อนอื่นคุณต้องคอมมิต ("คอมมิต") ซึ่งอัพเดตที่เก็บในเครื่องของคุณ (aka บนเครื่องโลคัลของคุณ) จากนั้นคุณต้องพุชไปยังเซิร์ฟเวอร์ ("git push") ซึ่งอัพเดตที่เก็บระยะไกล (บนเซิร์ฟเวอร์ github เช่น )
Romain

ฉันชอบฟังก์ชัน "เพิ่มจิตใจ" ใน Git!
Junchen Liu

1
ไม่เพียง แต่ทำบ่อย แต่ยังต้องผลักดันบ่อยๆด้วย สิ่งนี้ช่วยปกป้องงานของคุณเมื่อฮาร์ดไดรฟ์ของคุณขัดข้อง
CCC

86

git add เลือกการเปลี่ยนแปลง

git commit บันทึกการเปลี่ยนแปลงในท้องถิ่น

git push แบ่งปันการเปลี่ยนแปลง


22
  • git add เพิ่มไฟล์ลงในดัชนี Git ซึ่งเป็นพื้นที่จัดเตรียมสำหรับวัตถุที่เตรียมที่จะคอมมิต
  • git commitคอมมิตไฟล์ในดัชนีไปยังที่เก็บgit commit -aเป็นทางลัดในการเพิ่มไฟล์ติดตามที่แก้ไขทั้งหมดลงในดัชนีก่อน
  • git push ส่งการเปลี่ยนแปลงที่รอดำเนินการทั้งหมดไปยังที่เก็บระยะไกลซึ่งมีการแมปสาขาของคุณ (เช่นบน GitHub)

เพื่อให้เข้าใจ Git คุณจะต้องใช้ความพยายามมากกว่าเพียงแค่ดูเอกสาร แต่ก็คุ้มค่าแน่นอน อย่าพยายามแมปคำสั่ง Git โดยตรงกับ Subversion เนื่องจากส่วนใหญ่ไม่มีคู่กันโดยตรง


ใครบางคนควรอธิบายความแตกต่างระหว่าง github ท้องถิ่นและระยะไกล สิ่งที่คุณมีในท้องถิ่นและ remte นี่คือกุญแจที่คุณต้องหา
Mehdi Amrollahi

12

ฉันสับสนเกี่ยวกับสิ่งที่ 'เพิ่ม' จริงๆ ฉันเพิ่งอ่านย่อหน้าที่กระจ่างแจ้งจากหนังสือ Git Pro ที่ฉันต้องการเพิ่มที่นี่เพราะมันให้ความกระจ่างในสิ่งต่างๆ

“ ปรากฎว่า Git จัดลำดับไฟล์ให้เหมือนกับตอนที่คุณรันคำสั่ง git add หากคุณยอมรับในตอนนี้เวอร์ชันของ benchmarks.rb เหมือนเดิมเมื่อคุณรันคำสั่ง git add ครั้งสุดท้ายคือวิธีที่จะเข้าสู่คอมมิตไม่ใช่เวอร์ชันของไฟล์ตามที่ปรากฏในไดเร็กทอรีการทำงานของคุณเมื่อคุณรันคอมมิต หากคุณแก้ไขไฟล์หลังจากที่คุณเรียกใช้ git add คุณจะต้องเรียกใช้ git add อีกครั้งเพื่อจัดลำดับไฟล์เวอร์ชันล่าสุด:”

ตัดตอนมาจาก: Chacon, Scott “ Pro Git” สปริงเกอร์, 2009-08-19T00: 00: 00 + 00: 00. iBooks เนื้อหานี้อาจได้รับการคุ้มครองโดยลิขสิทธิ์


7

add บอกให้คอมไพล์เริ่มติดตามไฟล์

กระทำยอมรับการเปลี่ยนแปลงปัจจุบันของคุณบนที่เก็บในเครื่องของคุณ

push ผลักดัน repo ในพื้นที่ให้คุณ



5

pdf ที่ดีมากเกี่ยวกับความลับของ GIT มากมาย

Addเหมือนกับการเพิ่มของ svn (บางครั้งใช้เพื่อทำเครื่องหมายไฟล์ที่แก้ไขแล้ว)

Commitก็เหมือนกับ svn แต่คอมมิตการเปลี่ยนแปลงในที่เก็บในเครื่องของคุณ


2
ตอนนี้ฉันต้องไปค้นหา svn เพิ่มและคอมมิต ความกลัวที่ยิ่งใหญ่ของฉัน: เอกสารของพวกเขาจะแนะนำฉันให้คอมไพล์เพิ่มและคอมมิต และ lord_t เป็นผู้เขียนเอกสารดังกล่าว
eric

ผู้เขียนคำถามมีความรู้เกี่ยวกับ SVN ดังนั้นฉันจึงคิดว่าเขารู้คำสั่งของ svn
lord_t

0

add -in git ใช้เพื่อบอกคอมไพล์ว่าเราต้องการคอมมิตไฟล์ใดโดยจะนำไฟล์ไปไว้ในพื้นที่จัดเตรียม

คอมมิต - ในคอมไพล์ใช้เพื่อบันทึกไฟล์ลงในเครื่องภายในดังนั้นหากเราทำการเปลี่ยนแปลงใด ๆ หรือแม้แต่ลบไฟล์เรายังสามารถกู้คืนไฟล์ที่มุ่งมั่นของเราได้

ผลักดัน - หากเราส่งไฟล์ของเราบนเครื่องท้องถิ่นไฟล์เหล่านั้นจะยังคงสูญหายได้หากเครื่องในพื้นที่ของเราสูญหายได้รับความเสียหาย ฯลฯ เพื่อให้ไฟล์ของเราปลอดภัยหรือเพื่อแบ่งปันไฟล์ของเราโดยปกติเราต้องการเก็บไฟล์ของเราไว้บนรีโมท ที่เก็บเช่น Github ในการบันทึกที่เก็บระยะไกลเราใช้ push

ตัวอย่างการจัดเตรียมไฟล์ชื่อ index.html git add index.html

การคอมมิตไฟล์ที่เป็น staged git คอมมิต -m 'name of your คอมมิต'

การพุชไฟล์ไปยัง Github git push origin master

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