แก้ไขข้อความคอมมิชชันใน SourceTree Windows (ผลักไปที่รีโมตแล้ว)


202

ฉันจะแก้ไขข้อความคอมมิทที่ไม่ถูกต้องใน SourceTree โดยไม่ต้องแตะบรรทัดคำสั่งได้อย่างไร

รายละเอียดเพิ่มเติม:

  • นี่ไม่ใช่การกระทำล่าสุด
  • ทุกอย่างถูกส่งไปยัง Bitbucket แล้ว
  • นี่คือที่เก็บส่วนตัวและฉันเป็นผู้ทำงานร่วมกันคนเดียว
  • ฉันไม่รังเกียจที่จะเสียสิ่งใดที่ทำไปก่อนหน้านี้
  • ฉันไม่ต้องการที่จะสูญเสียการดัดแปลงโค้ดใด ๆ

ผล:

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

คำตอบ:


426

นี่คือขั้นตอนในการแก้ไขข้อความคอมมิชชันของการคอมมิชชันก่อนหน้า ( ซึ่งไม่ใช่การคอมมิทล่าสุด ) โดยใช้SourceTree สำหรับ Windows เวอร์ชัน 1.5.2.0 :

ขั้นตอนที่ 1

เลือกการมอบหมายทันทีก่อนการมอบอำนาจที่คุณต้องการแก้ไข ตัวอย่างเช่นหากฉันต้องการแก้ไขการส่งข้อความด้วย "FOOBAR!" จากนั้นฉันต้องเลือกการกระทำที่มาก่อน:

เลือกกระทำก่อนที่ฉันต้องการแก้ไข

ขั้นตอนที่ 2

คลิกขวาที่การกระทำที่เลือกและคลิกRebase children...interactively:

เลือก "Rebase children แบบโต้ตอบ"

ขั้นตอนที่ 3

เลือกการกระทำที่คุณต้องการแก้ไขจากนั้นคลิกEdit Messageที่ด้านล่าง ในกรณีนี้ฉันเลือกส่งข้อความ "FOOBAR!":

เลือกการกระทำที่คุณต้องการแก้ไข

ขั้นตอนที่ 4

แก้ไขข้อความยืนยันจากนั้นคลิกOKตกลง ในตัวอย่างของฉันฉันได้เพิ่ม "SHAZBOT! SKADOOSH!"

แก้ไขข้อความกระทำ

ขั้นตอนที่ 5

เมื่อคุณกลับไปที่หน้าต่างการรีบูตแบบโต้ตอบให้คลิกOKเพื่อสิ้นสุดการรีบูต:

คลิกตกลงเพื่อเสร็จสิ้น

ขั้นตอนที่ 6

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

คลิกTerminalจาก GUI เพื่อเปิดเทอร์มินัล

คลิกเทอร์มินัล

ขั้นตอนที่ 7

จากเทอร์มินัลบังคับกดด้วยคำสั่งต่อไปนี้

git push origin <branch> -f

ที่<branch>ชื่อของสาขาที่คุณต้องการที่จะผลักดันและ-fวิธีการที่จะผลักดัน แรงผลักดันจะเขียนทับคำมั่นสัญญาของคุณใน repo ระยะไกลของคุณ แต่มันก็โอเคในกรณีของคุณเนื่องจากคุณบอกว่าคุณไม่ได้แชร์ repo ของคุณกับคนอื่น

แค่นั้นแหละ! คุณทำเสร็จแล้ว!


4
ขั้นตอนนั้นเหมือนกันกับเวอร์ชั่น Mac ด้วย
race_carr

2
ระวัง: หากคุณต้องการเริ่มส่งข้อความคอมมิชชันด้วย # ซึ่งจะใช้งานไม่ได้คอมไพล์จะถือว่าเป็นความคิดเห็นและบอกว่าข้อความคอมมิชชันของคุณว่างเปล่า!
Daniel Edholm Ignat

1
"เสร็จแล้ว! คุณทำเสร็จแล้ว!" - มันง่ายมากที่ฉันไม่รู้อะไรเลย แทนที่จะสร้างคุณลักษณะของโปรแกรมสำหรับสถานการณ์ที่สำคัญและมักจะเห็น เมื่อคุณพิมพ์ผิดคุณต้องรีเซ็ตหัวและสร้างคำสั่งใหม่อีกครั้ง
Rantiev

67
ขำ ๆ - ฉันสงสัยว่าทำไมพวกเขาถึงไม่ทำตัวเลือก "แก้ไขข้อความส่ง"
Jonathan Aquino

1
Force Push สามารถใช้งานได้แล้วผ่าน GUI มิฉะนั้นจะสมบูรณ์แบบ :-)
LaTisha

43

ในเวอร์ชัน 1.9.6.1 สำหรับ UnPushed กระทำ

  1. คลิกที่คำอธิบายที่มุ่งมั่นก่อนหน้านี้
  2. คลิกไอคอนคอมมิท
  3. ป้อนข้อความส่งใหม่และเลือก " แก้ไขล่าสุดส่ง " จากเมนูแบบเลื่อนลง Commit
  4. ส่งข้อความของคุณ

13

หากข้อความแสดงความคิดเห็นมีอักขระที่ไม่ใช่ภาษาอังกฤษโดยใช้วิธีการที่จัดทำโดยผู้ใช้ 456814 อักขระเหล่านั้นจะถูกแทนที่ด้วยเครื่องหมายคำถาม (ทดสอบภายใต้ sourcetree Ver2.5.5.0)

ดังนั้นฉันต้องใช้วิธีการดังต่อไปนี้

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

ขั้นที่ 1 : ในหน้าต่างหลักของ sourcetree ให้หาแท็บ repo ของคุณและคลิกปุ่ม " terminal " เพื่อเปิดคอนโซลคำสั่ง git

ขั้นตอนที่ 2 :

[สถานการณ์ A] : การมอบหมายเป้าหมายเป็นสิ่งล่าสุด

1)ในคอนโซลคำสั่ง git ให้ป้อนข้อมูล

git commit --amend -m "new comment message"

2)หากการส่งมอบเป้าหมายได้รับการผลักไปยังระยะไกลคุณจะต้องผลักดันอีกครั้งโดยการบังคับ ในคอนโซลคำสั่ง git ให้ป้อนข้อมูล

git push --force

[สถานการณ์ B] : การมอบหมายเป้าหมายไม่ใช่สิ่งล่าสุด

1)ในคอนโซลคำสั่ง git ให้ป้อนข้อมูล

git rebase -i HEAD~n

มันคือการสควอชn คอมมิตล่าสุด เช่นถ้าคุณต้องการแก้ไขข้อความก่อนหน้าสุดท้ายnคือ 2 คำสั่งนี้จะเปิดหน้าต่าง vi คำแรกของแต่ละบรรทัดคือ " เลือก " และคุณเปลี่ยน "เลือก" เป็น " reword " สำหรับบรรทัด คุณต้องการแก้ไข จากนั้นป้อนข้อมูล:wqเพื่อบันทึก & ออกจากหน้าต่าง vi ตอนนี้หน้าต่าง vi ใหม่จะเปิดขึ้นในหน้าต่างนี้คุณป้อนข้อความใหม่ของคุณ นอกจากนี้ยังใช้:wqในการบันทึกและออกจาก

2)หากการส่งมอบเป้าหมายได้รับการผลักไปยังระยะไกลคุณจะต้องผลักดันอีกครั้งโดยการบังคับ ในคอนโซลคำสั่ง git ให้ป้อนข้อมูล

git push --force


สุดท้าย : ในหน้าต่างหลักต้นทางกดF5เพื่อรีเฟรช


12

ปรับปรุง

หมายเหตุ: เดิมคำตอบนี้เขียนขึ้นโดยคำนึงถึง SourceTree รุ่นเก่ากว่าสำหรับ Windows และตอนนี้ล้าสมัยแล้ว

ดูคำตอบใหม่ของฉันสำหรับเวอร์ชันปัจจุบันของ SourceTree สำหรับ Windows 1.5.2.0 ฉันทิ้งคำตอบนี้ไว้เพื่อจุดประสงค์ทางประวัติศาสตร์

คำตอบเดิม

ในขณะที่ฉันอยู่บน Windows ฉันไม่มีเครื่องมือบรรทัดคำสั่งและฉันรู้วิธีใช้อย่างใดอย่างหนึ่ง :( มันเป็นวิธีเดียวที่จะแยกออกได้หรือไม่ GUI ไม่ครอบคลุมฟังก์ชั่นของ git ทั้งหมด - โปสเตอร์ต้นฉบับ

เกี่ยวกับ Git GUIs, ไม่มีพวกเขาไม่ได้ครอบคลุมทุกฟังก์ชั่นของ Git พวกเขาไม่ได้มาใกล้ ฉันขอแนะนำให้คุณตรวจสอบคำตอบอย่างใดอย่างหนึ่งในฉันจะแก้ไขข้อความกระทำผิดใน Git ได้อย่างไร? Git มีความยืดหยุ่นเพียงพอที่จะมีโซลูชั่นหลายตัว ... จากบรรทัดคำสั่ง

SourceTree อาจมาพร้อมกับ msysgit bash shell แล้วหรืออาจใช้เชลล์คำสั่งมาตรฐานของ Windows ได้ คุณเปิดแบบฟอร์มขึ้นมา SourceTree ด้วยการคลิกที่ปุ่ม Terminal:

ป้อนคำอธิบายรูปภาพที่นี่

คุณตั้งค่าว่า TerminalTree ใดที่ใช้ (bash หรือ Windows) ที่นี่:

ป้อนคำอธิบายรูปภาพที่นี่

วิธีหนึ่งในการแก้ปัญหาใน SourceTree

ดังที่กล่าวมานี่เป็นวิธีหนึ่งที่คุณสามารถทำได้ใน SourceTree เมื่อคุณพูดถึงในความคิดเห็นที่คุณไม่รังเกียจ "ย้อนกลับไปสู่การกระทำผิดพลาด" (ซึ่งฉันถือว่าคุณหมายถึงการรีเซ็ตซึ่งเป็นการดำเนินการที่แตกต่างกันใน Git) จากนั้นนี่คือขั้นตอน:

  1. ทำการฮาร์ดรีเซ็ตใน SourceTree เป็นการกระทำที่ไม่ดีโดยการคลิกขวาที่มันแล้วเลือกReset current branch to this commitและเลือกตัวเลือกฮาร์ดรีเซ็ตจากรายการแบบหล่นลงป้อนคำอธิบายรูปภาพที่นี่
  2. คลิกปุ่ม Commit จากนั้น
  3. คลิกที่ช่องทำเครื่องหมายที่ด้านล่างว่า "แก้ไขการกระทำล่าสุด" ป้อนคำอธิบายรูปภาพที่นี่
  4. ทำการเปลี่ยนแปลงที่คุณต้องการกับข้อความจากนั้นคลิกกระทำอีกครั้ง Voila!

เกี่ยวกับความคิดเห็นนี้ :

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

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

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

git push remote-repo head -f

นอกจากนี้ยังถือว่า BitBucket จะช่วยให้คุณสามารถบังคับไปยัง repo

คุณควรเรียนรู้วิธีการใช้ Git จากบรรทัดคำสั่งอย่างไรก็ตามมันจะทำให้คุณมีความเชี่ยวชาญใน Git มากขึ้น #ProTip ใช้ msysgit และเปิดโหมด Quick Edit ในคุณสมบัติเทอร์มินัลเพื่อให้คุณสามารถดับเบิลคลิกเพื่อเน้นบรรทัดข้อความคลิกขวาเพื่อคัดลอกและคลิกขวาอีกครั้งเพื่อวาง มันค่อนข้างเร็ว

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