git rebase --interactive
adalah perintah yang Anda inginkan.
Contoh:
Status saat ini adalah ini:
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
Saya ingin menyusun ulang komit 9a24b81
( Komitmen ketiga) dan 7bdfb68
( Komitmen kedua). Untuk melakukan ini, pertama-tama saya menemukan komit sebelum komit pertama yang ingin kita ubah . Ini adalah komit 186d1e0
(Komitmen pertama).
Perintah yang akan dijalankan adalah git rebase --interactive COMMIT-BEFORE-FIRST-COMMIT-WE-WANT-TO-CHANGE
, dalam hal ini:
bernt@le3180:~/src/stackoverflow/reordering_of_commits
$ git rebase --interactive 186d1e0
Ini membuka file di editor default dengan konten berikut:
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.
#
Perhatikan bahwa urutan komit dalam file berlawanan dengan yang digunakan untuk git log. Dalam git log, komit terbaru ada di bagian atas. Dalam file ini, komit terbaru ada di bagian bawah.
Seperti yang dijelaskan oleh komentar di bagian bawah file, ada berbagai hal yang dapat saya lakukan, seperti menekan, melepas, dan menyusun ulang komitmen. Untuk memesan ulang komit, saya mengedit file sehingga terlihat seperti ini (komentar bawah tidak ditampilkan):
pick 9a24b81 Third commit
pick 7bdfb68 Second commit
pick a6e3c6a Fourth commit
The pick
perintah pada awal setiap baris berarti "penggunaan (yaitu mencakup) ini melakukan" dan ketika saya menyimpan file suhu dengan perintah rebase dan keluar dari editor, git akan mengeksekusi perintah dan memperbarui repositori dan direktori kerja:
$ 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
Perhatikan riwayat komit yang ditulis ulang.
Tautan: