Bagaimana Dengan Git: Batalkan Komit

Terkadang Anda mungkin melakukan perubahan pada repo Git Anda, tetapi kemudian menyadari bahwa Anda melakukan kesalahan. Sekarang Anda ingin membatalkan komitmen tersebut agar kode Anda berfungsi kembali.


Dalam panduan ini, kita akan melihat perintah reset git untuk komit lokal dan jarak jauh ke repositori.

Perbedaan Antara git reset dan git revert

Penting untuk memahami perbedaan antara mengatur ulang vs mengembalikan komitmen saat menggunakan Git.

  • Perintah reset git membatalkan komit dengan menghapus komit sebelumnya dari repositori dan mengatur ulang Git HEAD ke komit sebelumnya. Beberapa riwayat Git mungkin hilang dengan melakukan ini, tergantung pada opsi apa yang digunakan.
  • Perintah git revert membatalkan unduhan yang melakukan dengan membuat komit baru yang mewakili keadaan repositori sebelumnya. Tidak ada riwayat Git yang akan hilang dengan melakukan ini.

Sudah mendorong perubahan dan orang lain menarik perubahan itu? Anda seharusnya tidak menggunakan git reset untuk membatalkan perubahan, Anda harus menggunakan git revert seperti yang dijelaskan dalam panduan komit rollback Git kami sebagai gantinya.

Menggunakan Perintah reset git untuk Membatalkan Komit

Untuk contoh berikut, anggap pohon Git lokal kami terlihat seperti ini:

1
2
3

    X

    |

A-B-C

Itu X mewakili perubahan lokal kami yang tidak terikat pada Git HEAD kami, ditunjukkan oleh C.

Untuk membatalkan komit bernama “C “Karena kesalahan, kita dapat menjalankan perintah git reset.

Bergantung pada kebutuhan pelacakan file, Anda ingin menggunakan perintah git reset dengan flag yang berbeda.

Kasus 1: Gunakan git reset dan Hapus File Dari Staging Area

Kita dapat menggunakan perintah git reflog untuk melihat riwayat Git kita.

Kita dapat menggunakan file git ls untuk melihat file yang dipentaskan saat ini untuk proyek kami:

1
2
3
4
5
6
7
8
9
10

$ Git reflog

f326d13 HEAD @ {0}: commit: Ditambahkan C

358d535 HEAD @ {1}: commit: Ditambahkan B

00b61d5 HEAD @ {2}: commit (awal): Ditambahkan A

 

$ Git ls-file

SEBUAH
B
C
X

Untuk menyimpan file yang terlacak sejak komit C, tetapi menghapusnya dari indeks Git, Anda dapat menjalankan:

1 Git atur ulang KEPALA ~ 1

Anda dapat menggunakan singkatan Git dari HEAD ~ 1 untuk menghapus commit yang komit sebelum HEAD.

Jika Anda menggunakan HEAD ~ 5, ini akan menghapus komit yang lima komit sebelum KEPALA.

Perubahan pada indeks Git, juga disebut “area pementasan,” akan hilang, sehingga pohon Git sekarang akan:

1
2
3

  X

  |

A-B

Yang dapat kami konfirmasi dengan perintah-perintah ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

$ Git reflog

358d535 HEAD @ {0}: reset: pindah ke HEAD ~ 1

f326d13 KEPALA @ {1}: commit: Ditambahkan C

358d535 HEAD @ {2}: commit: Ditambahkan B

00b61d5 HEAD @ {3}: commit (awal): Ditambahkan A

 

$ Git ls-file

SEBUAH
B
 

$ Git status

Pada master cabang

File yang tidak dilacak:

  (menggunakan "Git tambahkan …" untuk dimasukkan dalam apa yang akan dilakukan)

 

        C

        X

 

Saat hanya menggunakan git reset tanpa bendera, kami tidak menghapus file apa pun; mereka hanya tidak dipentaskan:

1
2

$ ls

A B C X

Anda akhirnya menghapus entri log untuk komit yang Anda atur ulang, namun:

1
2
3
4
5
6
7
8
9
10
11
12

$ Git log

komit 358d535bc5e06730e61d272be34a6d0e568f42af

Penulis: Pengguna < [email protected]>

Tanggal: Sel 10 Feb 13:54:55 2015 -0500

 

    Menambahkan B

 

komit 00b61d53fe06ee672fa0497b175fb7bd89e26b72

Penulis: Pengguna < [email protected]>

Tanggal: Sel 10 Feb 13:54:55 2015 -0500

 

    Menambahkan A

Kasus 2: Gunakan git reset –soft dan Pertahankan Perubahan ke File

Jika Anda menggunakan flag –soft, setiap perubahan untuk melacak file dan indeks Git dipertahankan:

1 Setel ulang Git –soft HEAD ~ 1

File apa pun yang dipentaskan tetap demikian, dan tidak ada file yang dihapus secara fisik:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

$ Git ls-file

SEBUAH
B
C
X
 

$ ls

A B C X

 

$ Git status

Pada master cabang

Perubahan yang harus dilakukan:

  (menggunakan "Git atur ulang HEAD …" ke unstage)

 

        file baru: C

        file baru: X

Dengan menggunakan –soft flag, Anda tetap menghapus entri log untuk komit yang Anda atur ulang.

Kasus 2: Gunakan git reset –hard dan Hapus Semua Perubahan ke File

Jika Anda menggunakan –hard flag, perubahan apa pun untuk melacak file dan indeks Git hilang:

1
2

$ Git reset – HEAD HEAD ~ 1

KEPALA sekarang di 3bf1b55 Ditambahkan B

Semua file setelah komit yang Anda atur ulang tidak-dipentaskan dan dihapus secara fisik:

1
2
3
4
5
6
7
8
9
10

$ Git ls-file

SEBUAH
B
 

$ ls

A B

 

$ Git status

Pada master cabang

tidak ada komitmen, direktori kerja bersih

Anda lagi menghapus entri log Git untuk komit yang Anda atur ulang.

Coba Gunakan git revert Ketika Komit Sudah Didorong

Seperti yang dinyatakan di atas, jika Anda sudah mendorong perubahan Anda dan orang lain menarik perubahan itu, Anda tidak boleh menggunakan git reset untuk membatalkan perubahan, gunakan git kembalikan.

Namun, jika Anda benar-benar ingin, Anda dapat menerapkan langkah-langkah yang sama seperti di bagian sebelumnya untuk menghapus beberapa komitmen Git sebelumnya.

Setelah itu, Anda dapat melakukan git push -f untuk menggunakan opsi force. Sekali lagi, ini tidak direkomendasikan, karena dapat menciptakan konflik serius antara berbagai status penyimpanan pengguna Git lainnya.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me