Git

Cara Menghancurkan Komit Git

Cara Menghancurkan Komit Git

Cara Menghancurkan Komit di Git untuk Menjaga Riwayat Anda Tetap Bersih

Saat Anda bekerja dengan Git, ada baiknya untuk sering melakukan commit, sehingga Anda selalu dapat kembali ke status kode jika Anda melakukan kesalahan. Namun, melakukan semua perubahan kecil itu ke cabang utama tidak selalu merupakan ide yang bagus. Itu membuat sejarah berantakan dan sulit untuk diikuti.

Git menyediakan cara untuk menghancurkan banyak komit Anda menggunakan perintah rebase. Setelah Anda membuat perubahan secara lokal ke file tertentu atau untuk fitur tertentu, Anda selalu dapat menggunakan metode squash untuk menggabungkan perubahan bersama sebelum Anda berkomitmen ke cabang utama. Ini akan membantu orang lain memahami perubahan Anda dengan lebih baik.

Peringatan: Meskipun Anda dapat menarik dari repositori eksternal dan squash melakukan bersama-sama, itu ide yang buruk. Itu dapat menciptakan konflik dan kebingungan. Hindari mengubah sejarah yang sudah publik. Hanya berpegang pada komitmen pemusnahan yang bersifat lokal untuk pekerjaan Anda.

Mari kita bekerja melalui contoh kasus.

Misalkan, kita memiliki dua file a.py dan b.py. Pertama-tama mari kita melalui proses pembuatan file dan modifikasinya:

$mkdir proyek saya
$ cd proyek saya/
$ git init
$ echo "print("halo A")" > a.py
$ git add -A && git commit -m "Ditambahkan a.py"
$ echo "print("halo B")" > b.py
$ git add -A && git commit -m "Ditambahkan b.py"
$ echo "print("halo BB")" > b.py
$ git add -A && git commit -m "b.py Modifikasi 1"
$ echo "print("halo BBB")" > b.py
$ git add -A && git commit -m "b.py Modifikasi 2"

Jika kita memeriksa riwayat komit, kita akan melihat yang berikut:

$ git log --oneline --graph --decorate
* dfc0295 (KEPALA -> master) b.py Modifikasi 2
* ce9e582 b.py Modifikasi 1
* 7a62538 Ditambahkan b.py
* 952244a Ditambahkan.py

Setelah kami selesai dengan pekerjaan kami, kami memutuskan untuk menempatkan semua perubahan ke b.py menjadi satu komit untuk kejelasan. Kami menghitung bahwa ada 3 komit pada b.py dari KEPALA. Kami mengeluarkan perintah berikut:

git rebase -i KEPALA~3

Opsi -i memberi tahu Git untuk menggunakan mode interaktif.

Itu akan memunculkan jendela di editor teks Git Anda:

pilih 7a62538 Ditambahkan b.py
pilih ce9e582 b.py Modifikasi 1
pilih dfc0295 b.py Modifikasi 2
 
# Rebase 952244a… dfc0295 ke 952244a (3 perintah)
#
# Perintah:
# p, pilih = gunakan komit
# r, reword = gunakan komit, tetapi edit pesan komit
# e, edit = gunakan komit, tetapi berhenti untuk mengubah
# s, squash = gunakan komit, tetapi gabungkan ke komit sebelumnya
# f, fixup = like "squash", tetapi buang pesan log komit ini
# x, exec = jalankan perintah (baris lainnya) menggunakan shell
#
# Baris-baris ini dapat dipesan ulang; mereka dieksekusi dari atas ke bawah.
#
# Jika Anda menghapus baris di sini KOMITMEN AKAN HILANG.
#
# Namun, jika Anda menghapus semuanya, rebase akan dibatalkan.
#
# Perhatikan bahwa komit kosong dikomentari
~

Komit terdaftar secara kronologis di atas dari yang paling awal hingga yang terbaru. Anda dapat memilih komit mana untuk "memilih" dan komit mana yang harus diremas. Untuk kesederhanaan, kami akan memilih komit pertama dan memasukkan sisanya ke dalamnya. Jadi kita akan memodifikasi teks seperti ini:

pilih 7a62538 Ditambahkan b.py
squash ce9e582 b.py Modifikasi 1
labu dfc0295 b.py Modifikasi 2
 
# Rebase 952244a… dfc0295 ke 952244a (3 perintah)
#
# Perintah:
# p, pilih = gunakan komit
# r, reword = gunakan komit, tetapi edit pesan komit
# e, edit = gunakan komit, tetapi berhenti untuk mengubah
# s, squash = gunakan komit, tetapi gabungkan ke komit sebelumnya
# f, fixup = like "squash", tetapi buang pesan log komit ini
# x, exec = jalankan perintah (baris lainnya) menggunakan shell
#
# Baris-baris ini dapat dipesan ulang; mereka dieksekusi dari atas ke bawah.
#
# Jika Anda menghapus baris di sini KOMITMEN AKAN HILANG.
#
# Namun, jika Anda menghapus semuanya, rebase akan dibatalkan.
#
# Perhatikan bahwa komit kosong dikomentari

Segera setelah Anda menyimpan dan menutup file teks, jendela teks lain akan muncul seperti ini:

# Ini adalah kombinasi dari 3 komit.
# Pesan komit pertama adalah:
Ditambahkan b.py
 
# Ini adalah pesan komit ke-2:
 
b.py Modifikasi 1
 
# Ini adalah pesan komit ke-3:
 
b.py Modifikasi 2
 
# Silakan masukkan pesan komit untuk perubahan Anda. Garis mulai
# dengan '#' akan diabaikan, dan pesan kosong membatalkan komit.
#
# Tanggal:      Jum 30 Mar 21:09:43 2018 -0700
#
# rebase sedang berlangsung; ke 952244a
# Anda sedang mengedit komit saat rebasing cabang 'master' di '952244a'.
#
# Perubahan yang harus dilakukan:
#       file baru:   b.py
#

Simpan dan tutup file ini juga. Anda akan melihat sesuatu seperti ini:

$ git rebase -i KEPALA~3
[KEPALA terpisah 0798991] Ditambahkan b.py
Tanggal: Jum 30 Mar 21:09:43 2018 -0700
1 file diubah, 1 penyisipan (+)
buat mode 100644 b.py
Berhasil mengubah basis dan memperbarui referensi/kepala/master.

Jika Anda memeriksa riwayat komit sekarang:

$ git log --oneline --graph --decorate
* 0798991 (KEPALA -> master) Ditambahkan b.py
* 952244a Ditambahkan.py

Semua komitmen untuk b.py telah terjepit menjadi satu komit. Anda dapat memverifikasi dengan melihat b.file .py:

$ kucing b.py
print("halo BB")

Ini memiliki konten Modifikasi 2.

Kesimpulan

Rebase adalah perintah yang kuat. Ini dapat membantu Anda menjaga sejarah Anda tetap bersih. Tetapi hindari menggunakannya untuk komitmen publik karena dapat menyebabkan konflik dan kebingungan. Gunakan hanya untuk repositori lokal Anda sendiri.

Pelajaran lanjutan:

Tombol klik kiri mouse tidak berfungsi pada Windows 10
Jika Anda menggunakan mouse khusus dengan laptop, atau komputer desktop, tetapi but tombol klik kiri mouse tidak berfungsi pada Windows 10/8/7 untuk b...
Kursor melompat atau bergerak secara acak saat mengetik di Windows 10
Jika Anda menemukan bahwa kursor mouse Anda melompat atau bergerak sendiri, secara otomatis, acak saat mengetik di laptop atau komputer Windows, maka ...
Cara membalikkan arah gulir Mouse dan Touchpads di Windows 10
Mouse dan Panel sentuhs tidak hanya membuat komputasi menjadi mudah tetapi juga lebih efisien dan tidak memakan banyak waktu. Kami tidak dapat membaya...