ฉันจะรวมสองคอมมิตเข้าด้วยกันได้อย่างไรถ้าฉันเริ่มรีบูตแล้ว?


1157

ฉันพยายามที่จะผสาน 2 กระทำแบ่งออกเป็น 1 ดังนั้นผมทำตาม“ฉับกระทำกับ rebase” จากคอมไพล์พร้อม

ฉันวิ่ง

git rebase --interactive HEAD~2

ในตัวแก้ไขผลลัพธ์ฉันเปลี่ยนpickเป็นsquashแล้วบันทึกออกจาก แต่การ rebase ล้มเหลวด้วยข้อผิดพลาด

ไม่สามารถ 'สควอช' โดยไม่ส่งคำสั่งก่อนหน้า

เมื่อต้นไม้ทำงานของฉันมาถึงสถานะนี้ฉันมีปัญหาในการกู้คืน

คำสั่งgit rebase --interactive HEAD~2ล้มเหลวด้วย:

การปฏิเสธเชิงโต้ตอบเริ่มขึ้นแล้ว

และgit rebase --continueล้มเหลวด้วย

ไม่สามารถ 'สควอช' โดยไม่ส่งคำสั่งก่อนหน้า


22
ฉันก็ตีนี่เหมือนกัน ความผิดพลาดของฉันเกิดจากความจริงที่ว่า rebit คอมไพล์ -i แสดงความมุ่งมั่นในลำดับที่ตรงกันข้ามของบันทึกคอมไพล์; การกระทำล่าสุดอยู่ที่ด้านล่าง!
lmsurprenant


1
ตรวจสอบด้วย: git-scm.com/book/en/Git-Tools-Rewriting-History
nha

คำตอบ:


1732

สรุป

ข้อความแสดงข้อผิดพลาด

ไม่สามารถ 'สควอช' โดยไม่ส่งคำสั่งก่อนหน้า

หมายความว่าคุณน่าจะพยายาม "สควอชลง" Git ทำให้การคอมมิชชันที่ใหม่กว่าเป็นการคอมมิชชันเก่าหรือ“ ขึ้น” เมื่อดูในรายการสิ่งที่ต้องทำแบบรีบูตแบบโต้ตอบซึ่งจะเป็นการคอมมิทบนบรรทัดก่อนหน้า การเปลี่ยนคำสั่งในบรรทัดแรกสุดของรายการสิ่งที่ต้องทำของคุณsquashจะทำให้เกิดข้อผิดพลาดนี้เสมอเนื่องจากไม่มีสิ่งใดสำหรับการส่งสควอชครั้งแรก

การแก้ไข

ก่อนอื่นกลับไปที่ที่คุณเริ่มต้นด้วย

$ git rebase --abort

บอกว่าประวัติของคุณคือ

$ git log --pretty=oneline
a931ac7c808e2471b22b5bd20f0cad046b1c5d0d c
b76d157d507e819d7511132bdb5a80dd421d854f b
df239176e1a2ffac927d8b496ea00d5488481db5 a

นั่นคือ a คือการกระทำแรกจากนั้น b และในที่สุด c หลังจากคอมมิทเราตัดสินใจที่จะสควอชขและคด้วยกัน:

(หมายเหตุ: การเรียกใช้git logการส่งออกไปยังเพจเจอร์lessตามค่าเริ่มต้นบนแพลตฟอร์มส่วนใหญ่หากต้องการออกจากเพจเจอร์และกลับสู่พรอมต์คำสั่งของคุณให้กดqปุ่ม)

การรันgit rebase --interactive HEAD~2จะช่วยให้คุณแก้ไขได้

pick b76d157 b
pick a931ac7 c

# Rebase df23917..a931ac7 onto df23917
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

(ขอให้สังเกตว่ารายการสิ่งที่ต้องทำนี้อยู่ในลำดับย้อนกลับเมื่อเทียบกับผลลัพธ์ของgit log)

การเปลี่ยนขของpickการsquashจะส่งผลให้เกิดข้อผิดพลาดที่คุณเห็น แต่ถ้าแทนคุณสควอชคเข้าไปในข (ใหม่กระทำลงไปเก่าหรือ“ฉับขึ้น”) โดยการเปลี่ยนรายการสิ่งที่ต้องทำเพื่อ

pick   b76d157 b
squash a931ac7 c

และบันทึกออกจากโปรแกรมแก้ไขของคุณคุณจะได้รับโปรแกรมแก้ไขเนื้อหาที่มี

# This is a combination of 2 commits.
# The first commit's message is:

b

# This is the 2nd commit message:

c

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

$ git log --pretty=oneline
18fd73d3ce748f2a58d1b566c03dd9dafe0b6b4f b and c
df239176e1a2ffac927d8b496ea00d5488481db5 a

หมายเหตุเกี่ยวกับประวัติการเขียนซ้ำ

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

หากสาขาที่คุณนำกลับมาใช้เป็นหัวข้อหรือสาขาคุณลักษณะที่คุณทำงานด้วยตัวเองก็ไม่ใช่เรื่องใหญ่อะไร การพุชไปยังที่เก็บอื่นจะต้องใช้--forceตัวเลือกหรือคุณอาจสามารถขึ้นอยู่กับการอนุญาตของที่เก็บรีโมตเพื่อลบสาขาเก่าก่อนจากนั้นจึงกดเวอร์ชันที่รีบูต ตัวอย่างคำสั่งเหล่านั้นที่อาจทำลายงานอยู่นอกขอบเขตของคำตอบนี้

การเขียนประวัติศาสตร์ที่เผยแพร่แล้วบนกิ่งไม้ในที่ที่คุณกำลังทำงานกับคนอื่น ๆ ได้โดยไม่ต้องมากเหตุผลที่ดีเช่นการรั่วไหลของรหัสผ่านหรือรายละเอียดอื่น ๆ ที่มีความสำคัญกองกำลังทำงานบนที่ทำงานร่วมกันและเป็นปรปักษ์ต่อสังคมและจะรบกวนนักพัฒนาอื่น ๆ ส่วน“ การกู้คืนจากการรีสตรีม Rebase” ในgit rebaseเอกสารอธิบายอธิบายโดยเน้นที่เพิ่มเติม

การรีบูท (หรือการเขียนใหม่ในรูปแบบอื่น ๆ ) สาขาที่คนอื่นใช้ทำงานเป็นความคิดที่ไม่ดี: ใครก็ตามที่ถูกดาวน์สตรีมของมันจะถูกบังคับให้แก้ไขประวัติด้วยตนเอง ส่วนนี้อธิบายวิธีการแก้ไขจากมุมมองของดาวน์สตรีม การแก้ไขที่แท้จริงจะหลีกเลี่ยงการเริ่มต้นใหม่ในตอนแรก ...


ถ้าฉันใช้ rebase เพื่อสควอชคอมมิชชันคอมมิชชัน "รวม" ใหม่จะถูกสร้างขึ้นโดยมีเซ็ตการแก้ไขสองรายการ แต่แฮชจะแตกต่างกัน คอมมิชชันดั้งเดิมถูกเก็บรักษาไว้โดย git เช่นกัน?
fabsenet

@fabsenet ใช่และไม่ใช่ การกระทำเดิมยังคงสามารถเข้าถึงได้ แต่มีแนวโน้มว่าจะไม่สามารถเข้าถึงได้จากการอ้างอิงใด ๆ อีกต่อไป (ขึ้นอยู่กับรายละเอียดประวัติของคุณ) การกระทำที่ไม่ได้รับการยืนยันจะถูกลบล้างในที่สุดผ่านกระบวนการรวบรวมขยะ
Greg Bacon

ฉันแค่เล่นไปรอบ ๆ ... ฉันทำgit log hashoftheoldcommitและมันใช้งานได้ แต่ฉันอยากรู้อยากเห็นการgit log --graphกระทำเหล่านี้รวมถึงความมุ่งมั่น
fabsenet

สควอชนี้เป็นเครื่องมือที่ดีในการจัดการคอมมิทก่อนกด แต่ถ้าฉันกดคอมมิทหนึ่งครั้ง git พูดว่า: นำกลับมาใช้ใหม่และอัปเดต HEAD เดี่ยวที่ประสบความสำเร็จ
Sérgio

กำลังไม่ได้รับการแก้ไขในอินสแตนซ์ที่สอง, git bash, ดูเหมือนว่าค้างในกระบวนการบางอย่าง จะทำอย่างไร?

411

หากมีหลายกระทำคุณสามารถใช้git rebase -iเพื่อกำจัดสองกระทำเป็นหนึ่ง

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

git reset --soft "HEAD^"
git commit --amend

6
ข้อเสียคืออะไรเมื่อเทียบกับการคืนเงิน? ฉันพบว่าใช้ง่ายกว่ามาก
Guillaume86

17
คุณไม่สามารถเข้าร่วมในการสั่งซื้อโดยพลการ - เพียงสองกระทำที่ผ่านมา
dr0i

50
@ dr0i คุณสามารถรวมการคอมมิชชันได้มากเท่าที่คุณต้องการตราบใดที่พวกมันเป็นคอมมิชชันX อันสุดท้ายและไม่ได้อยู่ตรงกลาง เรียกใช้git reset --soft HEAD~10โดยที่ 10 คือจำนวนการคอมมิตที่คุณต้องการรวม
fregante

2
สามารถใช้สิ่งนี้ได้หากคุณไม่มีชุดต้นทางระยะไกลและคุณมีข้อผูกพันสองอย่างเท่านั้น
atedja

8
นอกจากนี้คุณยังสามารถตั้งค่าเฉพาะที่กระทำถ้าคุณไม่อยากจะนับว่ามีหลายจากHEADโดยใช้git reset --soft 47b5c5...ที่47b5c5...คือ ID SHA1 ของการกระทำ
dguay

112

Rebase: คุณไม่ต้องการมัน:

วิธีที่ง่ายกว่าสำหรับสถานการณ์ที่พบบ่อยที่สุด

ในกรณีส่วนใหญ่:

อันที่จริงถ้าสิ่งที่คุณต้องการเป็นเพียงแค่รวมกระทำที่ผ่านมาหลายเป็นหนึ่ง แต่ไม่จำเป็นdrop, rewordและการทำงาน rebase อื่น ๆ

คุณสามารถทำได้:

git reset --soft "HEAD~n"
  • สมมติว่า~nคือจำนวนของการกระทำที่จะเบา ๆ ยกเลิกการกระทำ (เช่น~1, ~2, ... )

จากนั้นใช้คำสั่งต่อไปนี้เพื่อปรับเปลี่ยนข้อความยืนยัน

git commit --amend

ซึ่งสวยมากเช่นเดียวกับช่วงที่ยาวนานของและเป็นหนึ่งในsquashpick

และมันใช้งานได้สำหรับ n คอมมิต แต่ไม่ใช่แค่สองคอมมิตตามคำตอบข้างต้น


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

1
สมมติว่า~nคือจำนวนของการกระทำที่จะเบา ๆ ยกเลิกการกระทำ (เช่น~1, ~2, ... )
เรย์

1
ถ้าฉันต้องการที่จะรวมกันไม่ได้nกระทำครั้งสุดท้าย แต่nมุ่งมั่นอยู่ตรงกลาง? ฉันสามารถทำสิ่งนี้ได้อย่างง่ายดาย
chumakoff

1
จากนั้นgit rebase -iเป็นสิ่งที่คุณต้องsquashทำงาน @chumakoff
pambda

3
ดังนั้นเพื่อเข้าร่วมnล่าสุดมุ่งมั่นเป็นหนึ่งใช้ครั้งแรกgit reset --soft @~mที่m = n - 1
Łukasz Rajchel

55

ก่อนอื่นคุณควรตรวจสอบว่าคุณได้ทำสัญญาไว้แล้ว:

git log

มีสองสถานะคือ

หนึ่งคือว่ามีเพียงสองกระทำ:

ตัวอย่างเช่น:

commit A
commit B

(ในกรณีนี้คุณไม่สามารถใช้ rebase git เพื่อทำ) คุณต้องทำดังต่อไปนี้

$ git reset --soft HEAD^1

$ git commit --amend

อีกข้อหนึ่งคือมีการผูกพันมากกว่าสองรายการ คุณต้องการรวมคอมมิชชัน C และ D

ตัวอย่างเช่น:

commit A
commit B
commit C
commit D

(ภายใต้เงื่อนไขนี้คุณสามารถใช้ rebit git)

git rebase -i B

และกว่าใช้ "สควอช" ที่ต้องทำ ส่วนที่เหลือเป็นเรื่องง่ายมาก หากคุณยังไม่รู้โปรดอ่านhttp://zerodie.github.io/blog/2012/01/19/git-rebase-i/


รีเซ็ต - soft และ commit --amend เป็นวิธีเดียวที่ใช้งานได้หากคุณมี rebase อยู่ระหว่างดำเนินการ (และเลือก 'แก้ไข' แทน 'squash' สำหรับการคอมมิทนี้) +1
Jacek Lach

1
ผสานแรกและคนเดียวสองกระทำในพื้นที่เก็บข้อมูลว่ากรณีที่ขอบของฉัน :-)
คริส Huang-Leaver

1
กรุณาเพิ่มที่git push -f origin masterอาจจำเป็น
Rishabh Agrahari

33

สมมติว่าคุณอยู่ในหัวข้อของคุณเอง หากคุณต้องการรวม 2 คอมมิชชันล่าสุดเข้าด้วยกันและดูเหมือนว่าเป็นฮีโร่ให้แยกการคอมมิทก่อนที่คุณจะทำการคอมมิทสองครั้งล่าสุด

git checkout -b temp_branch HEAD^2

จากนั้นสควอชจะส่งสาขาอื่นในสาขาใหม่นี้:

git merge branch_with_two_commits --squash

ที่จะนำมาซึ่งการเปลี่ยนแปลง แต่ไม่ได้กระทำ ดังนั้นเพียงแค่กระทำพวกเขาและคุณทำเสร็จแล้ว

git commit -m "my message"

ตอนนี้คุณสามารถรวมสาขาหัวข้อใหม่นี้กลับเข้าไปในสาขาหลักของคุณ


5
จริงๆแล้วนี่เป็นคำตอบที่เป็นประโยชน์ที่สุดสำหรับฉันเพราะมันไม่จำเป็นต้องทำการรีบูตด้วยตนเอง แต่เพียงแค่กำจัดการกระทำทั้งหมดของสาขาทั้งหมดให้เป็นคอมมิชชันเดียว ดีมาก.
Robert

ขอบคุณสำหรับสิ่งนี้! นี่คือวิธีที่จะทำให้คอมไพล์ทำตามที่ฉันนึกถึงการสควอชในหัวของฉัน!
Marjan Venema

คำตอบที่น่าอัศจรรย์นั้นง่ายกว่าตัวเลือกอื่น ๆ

เห็นได้ชัดว่าคำตอบนี้ไม่เหมาะสำหรับกรณีที่เมื่อใดaและcจะต้องรวมเข้าด้วยกันและเก็บไว้bตามที่มันเป็น
Talha Ashraf

2
มีการเปลี่ยนแปลงบางอย่างใน git รุ่นล่าสุดหรือไม่? เมื่อฉันพยายามคำสั่งแรก ( git checkout -b combine-last-two-commits "HEAD^2") ในรุ่นคอมไพล์ 2.17 ฉันได้รับข้อผิดพลาด:fatal: 'HEAD^2' is not a commit and a branch 'combine-last-two-commits' cannot be created from it
mhucka

23

คุณสามารถยกเลิกการคืนเงินด้วย

git rebase --abort

และเมื่อคุณรันคำสั่ง rebase เชิงโต้ตอบอีกครั้ง 'สควอช; กระทำจะต้องต่ำกว่าเลือกกระทำในรายการ


16

ฉันมักจะใช้การตั้งค่า git - ผสมเพื่อย้อนกลับเวอร์ชันพื้นฐานก่อนที่จะคอมมิทหลายครั้งที่คุณต้องการผสานจากนั้นฉันทำการคอมมิทใหม่วิธีนั้นจะทำให้การคอมมิชชันใหม่ล่าสุดของคุณรับรองเวอร์ชันของคุณคือ HEAD

commit ac72a4308ba70cc42aace47509a5e
Author: <me@me.com>
Date:   Tue Jun 11 10:23:07 2013 +0500

    Added algorithms for Cosine-similarity

commit 77df2a40e53136c7a2d58fd847372
Author: <me@me.com>
Date:   Tue Jun 11 13:02:14 2013 -0700

    Set stage for similar objects

commit 249cf9392da197573a17c8426c282
Author: Ralph <ralph@me.com>
Date:   Thu Jun 13 16:44:12 2013 -0700

    Fixed a bug in space world automation

ถ้าฉันต้องการรวมหัวสองคอมมิชชันเป็นอันแรกฉันจะใช้:

git reset --mixed 249cf9392da197573a17c8426c282

"249cf9392da197573a17c8426c282" เป็นรุ่นที่สามยังเป็นรุ่นพื้นฐานของคุณก่อนที่คุณจะผสานหลังจากนั้นฉันได้คอมมิทใหม่:

git add .
git commit -m 'some commit message'

มันคือทั้งหมดความหวังเป็นอีกวิธีหนึ่งสำหรับทุกคน

FYI จากgit reset --help:

 --mixed
     Resets the index but not the working tree (i.e., the changed files are
     preserved but not marked for commit) and reports what has not been
     updated. This is the default action.

ฉันไม่ได้อ่านเอกสารสำหรับ '- ผสม' แต่ฉันแน่ใจว่าคนอื่นอ่านโพสต์และสงสัยในสิ่งเดียวกัน: ประโยชน์ของการใช้ - ผสมคืออะไร อาจปรับปรุงการโพสต์ของคุณเพื่อรวมตัวอย่างของหน้าคน
funroll

@Funroll ฉันไม่ทราบ - ผสมกันมากก่อนที่ฉันจะเขียนคำตอบนี้ตามประสบการณ์ของฉันเองการดำเนินการแบบผสมจะเปิดการระบุรุ่นที่ฉันผ่านเป็นอาร์กิวเมนต์เป็นรุ่นที่เก็บหัวและไม่มีอะไรจะสูญเสียหลังจากรุ่นนั้น ดังนั้นเราจึงสามารถจัดการกับการเปลี่ยนแปลงเหล่านั้นได้
VinceStyling

14

$ git rebase --abort

เรียกใช้รหัสนี้ได้ตลอดเวลาหากคุณต้องการเลิกทำการรีบูท git

$ git rebase -i HEAD~2

หากต้องการใช้งานซ้ำสองครั้งล่าสุด คำสั่งดังกล่าวจะเปิดตัวแก้ไขรหัส

  • [ ความมุ่งมั่นล่าสุดจะอยู่ที่ด้านล่าง ] เปลี่ยนการกระทำล่าสุดเป็นสควอช ตั้งแต่สควอชจะหลอมรวมกับการกระทำก่อนหน้า
  • จากนั้นกดปุ่ม esc แล้วพิมพ์: wq เพื่อบันทึกและปิด

หลัง: wq คุณจะอยู่ในโหมด rebase ที่ใช้งานอยู่

หมายเหตุ : คุณจะได้รับตัวแก้ไขอื่นหากไม่มีคำเตือน / ข้อความแสดงข้อผิดพลาดหากมีข้อผิดพลาดหรือคำเตือนตัวแก้ไขอื่นจะไม่แสดงคุณอาจยกเลิกได้โดยการเรียกใช้ $ git rebase --abortถ้าคุณเห็นข้อผิดพลาดหรือคำเตือนอื่น ๆ$ git rebase --continue

คุณจะเห็นข้อความการส่งข้อความ 2 ข้อความของคุณ เลือกหนึ่งข้อความหรือเขียนข้อความยืนยันบันทึกและออกจาก [: wq]

หมายเหตุ 2:คุณอาจจำเป็นต้องบังคับให้ส่งการเปลี่ยนแปลงไปยัง repo ระยะไกลหากคุณเรียกใช้คำสั่ง rebase

$ git push -f

$ git push -f origin master


1
หมายเหตุ 2: git push -f origin/masterอะไรคือคำตอบอื่น ๆ ที่ขาดหายไป +1
Rishabh Agrahari

2

เนื่องจากฉันใช้git cherry-pickสำหรับทุกสิ่งเพียงอย่างเดียวสำหรับฉันมันเป็นเรื่องธรรมดาที่จะทำแม้ที่นี่

เนื่องจากฉันได้branchXตรวจสอบแล้วและมีข้อผูกมัดอยู่สองข้อที่ฉันต้องการสร้างการรวมเนื้อหาเข้าด้วยกันฉันจึงทำสิ่งนี้:

git checkout HEAD^ // Checkout the privious commit
git cherry-pick --no-commit branchX // Cherry pick the content of the second commit
git commit --amend // Create a new commit with their combined content

ถ้าฉันต้องการอัปเดตbranchXด้วย (และฉันคิดว่านี่เป็นข้อเสียของวิธีนี้) ฉันต้อง:

git checkout branchX
git reset --hard <the_new_commit>

1

หากสาขาหลักของคุณgit logมีลักษณะดังนี้:

commit ac72a4308ba70cc42aace47509a5e
Author: <me@me.com>
Date:   Tue Jun 11 10:23:07 2013 +0500

    Added algorithms for Cosine-similarity

commit 77df2a40e53136c7a2d58fd847372
Author: <me@me.com>
Date:   Tue Jun 11 13:02:14 2013 -0700

    Set stage for similar objects

commit 249cf9392da197573a17c8426c282
Author: Ralph <ralph@me.com>
Date:   Thu Jun 13 16:44:12 2013 -0700

    Fixed a bug in space world automation

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

  1. ก่อนอื่นให้อยู่ในการชำระเงินที่ปลอดภัยการส่งมอบครั้งที่สองในสาขาแยกต่างหาก คุณสามารถตั้งชื่อสาขาอะไรก็ได้git checkout 77df2a40e53136c7a2d58fd847372 -b merged-commits
  2. ตอนนี้เพียงแค่เลือกการเปลี่ยนแปลงของคุณจากการกระทำครั้งสุดท้ายในสาขาใหม่นี้เป็น: git cherry-pick -n -x ac72a4308ba70cc42aace47509a5e. (แก้ไขข้อขัดแย้งหากเกิดขึ้น)
  3. ดังนั้นตอนนี้การเปลี่ยนแปลงของคุณในการส่งมอบครั้งล่าสุดจะมีในการส่งมอบครั้งที่สองของคุณ git commit --amendแต่คุณยังจะต้องกระทำอย่างแรกเพื่อเพิ่มการเปลี่ยนแปลงที่คุณเพิ่งเชอร์รี่เลือกและจากนั้นดำเนินการ

แค่นั้นแหละ. คุณสามารถผลักดันเวอร์ชันที่ผสานนี้ในสาขา "ผสาน - กระทำ" หากคุณต้องการ

นอกจากนี้คุณยังสามารถละทิ้งการทำ back-to-back สองคอมมิตในสาขาหลักของคุณได้ทันที เพียงอัปเดตสาขาหลักของคุณเป็น:

git checkout master
git reset --hard origin/master (CAUTION: This command will remove any local changes to your master branch)
git pull

0

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

ผมถือว่า:

  • คุณกำลังใช้ vi เป็นบรรณาธิการของคุณ
  • ความมุ่งมั่นของคุณคือหนึ่งบรรทัด

git version 2.14.3 (Apple Git-98)ผมทดสอบด้วย


#!/usr/bin/env expect
spawn git rebase -i HEAD~2

# change the second "pick" to "squash"
# down, delete word, insert 's' (for squash), Escape, save and quit
send "jdwis \033:wq\r"

expect "# This is a"

# skip past first commit message (assumed to be one line), delete rest of file
# down 4, delete remaining lines, save and quit
send "4jdG\r:wq\r"

interact

มันไม่ชัดเจนว่าสคริปต์ของคุณทำอะไร
buhtz

@buhtz ฉันเพิ่มความคิดเห็นอีกบางส่วน แจ้งให้เราทราบหากคุณยังพบว่ามันทำให้เกิดความสับสนและถ้าเป็นเช่นนั้นส่วนไหน
erwaman

มันยังไม่ชัดเจนว่าการสำรวจของคุณทำอะไร ยังexpectไม่มีการอธิบาย
buhtz

@buhtz ส่วนไหนไม่ชัดเจน? expectฉันมีให้เชื่อมโยงไปยังหน้าเว็บที่มีเอกสารมากขึ้นสำหรับ
erwaman

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