git rebase --interactive
คือคำสั่งที่คุณต้องการ
ตัวอย่าง:
สถานะปัจจุบันคือ:
bernt@le3180:~/src/stackoverflow/reordering_of_commits
$ git status
On branch master
nothing to commit, working tree clean
bernt@le3180:~/src/stackoverflow/reordering_of_commits
$ git log --oneline
a6e3c6a (HEAD -> master) Fourth commit
9a24b81 Third commit
7bdfb68 Second commit
186d1e0 First commit
ฉันต้องการเรียงลำดับคอม9a24b81
มิตใหม่(คอมมิตที่สาม) และ7bdfb68
(คอมมิตที่สอง) การทำเช่นนี้ครั้งแรกที่ผมพบว่ากระทำก่อนที่จะกระทำแรกเราต้องการที่จะเปลี่ยนแปลง นี่คือการกระทำ186d1e0
(การกระทำครั้งแรก)
คำสั่งในการดำเนินการคือgit rebase --interactive COMMIT-BEFORE-FIRST-COMMIT-WE-WANT-TO-CHANGE
ในกรณีนี้:
bernt@le3180:~/src/stackoverflow/reordering_of_commits
$ git rebase --interactive 186d1e0
สิ่งนี้จะเปิดไฟล์ในโปรแกรมแก้ไขเริ่มต้นที่มีเนื้อหาต่อไปนี้:
pick 7bdfb68 Second commit
pick 9a24b81 Third commit
pick a6e3c6a Fourth commit
# Rebase 186d1e0..a6e3c6a onto 186d1e0 (3 commands)
#
# 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
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
โปรดทราบว่าลำดับของคอมมิตในไฟล์จะตรงข้ามกับที่ใช้สำหรับบันทึกคอมไพล์ ในบันทึกคอมไพล์คอมมิตล่าสุดจะอยู่ด้านบน ในไฟล์นี้การกระทำล่าสุดจะอยู่ที่ด้านล่าง
ตามความคิดเห็นที่ด้านล่างของไฟล์อธิบายว่ามีหลายสิ่งที่ฉันทำได้เช่นการบีบการวางและการเรียงลำดับคอมมิตใหม่ ในการสั่งคอมมิตใหม่ฉันแก้ไขไฟล์ให้มีลักษณะเช่นนี้ (ไม่แสดงความคิดเห็นด้านล่าง):
pick 9a24b81 Third commit
pick 7bdfb68 Second commit
pick a6e3c6a Fourth commit
pick
คำสั่งในช่วงเริ่มต้นของแต่ละบรรทัดหมายถึง "การใช้งาน (เช่นรวม) กระทำนี้" และเมื่อฉันบันทึกไฟล์ชั่วคราวที่มีคำสั่ง rebase และออกจากบรรณาธิการคอมไพล์จะรันคำสั่งและการปรับปรุงพื้นที่เก็บข้อมูลและไดเรกทอรีการทำงาน:
$ git rebase --interactive 186d1e0
Successfully rebased and updated refs/heads/master.
bernt@le3180:~/src/stackoverflow/reordering_of_commits
$ git log --oneline
ba48fc9 (HEAD -> master) Fourth commit
119639c Second commit
9716581 Third commit
186d1e0 First commit
จดบันทึกประวัติการคอมมิตที่เขียนใหม่
ลิงค์: