Git - Perbaiki Kesalahan

Untuk berbuat salah adalah manusia. Jadi setiap VCS menyediakan fitur untuk memperbaiki kesalahan hingga suatu titik tertentu. Git menyediakan fitur yang bisa kita gunakan untuk membatalkan modifikasi yang telah dilakukan pada repositori lokal.

Misalkan pengguna secara tidak sengaja melakukan beberapa perubahan pada repositori lokalnya dan kemudian ingin membatalkan perubahan ini. Dalam kasus seperti itu, filerevert operasi memainkan peran penting.

Kembalikan Perubahan yang Belum Dilakukan

Mari kita anggap Jerry secara tidak sengaja memodifikasi file dari repositori lokalnya. Tapi dia ingin membatalkan modifikasinya. Untuk menangani situasi ini, kita dapat menggunakangit checkoutperintah. Kita dapat menggunakan perintah ini untuk mengembalikan konten file.

[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src

[jerry@CentOS src]$ git status -s
M string_operations.c

[jerry@CentOS src]$ git checkout string_operations.c

[jerry@CentOS src]$ git status –s

Selanjutnya, kita bisa menggunakan git checkoutperintah untuk mendapatkan file yang dihapus dari repositori lokal. Misalkan Tom menghapus file dari repositori lokal dan kami ingin file ini kembali. Kami dapat mencapai ini dengan menggunakan perintah yang sama.

[tom@CentOS src]$ pwd
/home/tom/top_repo/project/src

[tom@CentOS src]$ ls -1
Makefile
string_operations.c

[tom@CentOS src]$ rm string_operations.c

[tom@CentOS src]$ ls -1
Makefile

[tom@CentOS src]$ git status -s
D string_operations.c

Git menunjukkan surat itu Dsebelum nama file. Ini menunjukkan bahwa file tersebut telah dihapus dari repositori lokal.

[tom@CentOS src]$ git checkout string_operations.c

[tom@CentOS src]$ ls -1
Makefile
string_operations.c

[tom@CentOS src]$ git status -s

Note - Kami dapat melakukan semua operasi ini sebelum berkomitmen.

Hapus Perubahan dari Staging Area

Kita telah melihat bahwa ketika kita melakukan operasi penambahan, file dipindahkan dari repositori lokal ke area status. Jika pengguna secara tidak sengaja mengubah file dan menambahkannya ke dalam staging area, dia dapat mengembalikan perubahannya, dengan menggunakangit checkout perintah.

Di Git, ada satu penunjuk HEAD yang selalu menunjuk ke komit terbaru. Jika Anda ingin membatalkan perubahan dari staged area, Anda dapat menggunakan perintah git checkout, tetapi dengan perintah checkout, Anda harus menyediakan parameter tambahan, yaitu pointer HEAD. Parameter penunjuk komit tambahan menginstruksikan perintah git checkout untuk mengatur ulang pohon kerja dan juga untuk menghapus perubahan bertahap.

Mari kita anggap Tom memodifikasi file dari repositori lokalnya. Jika kita melihat status dari file ini, maka akan terlihat bahwa file tersebut telah dimodifikasi tetapi tidak ditambahkan ke dalam staging area.

tom@CentOS src]$ pwd
/home/tom/top_repo/project/src
# Unmodified file

[tom@CentOS src]$ git status -s

# Modify file and view it’s status.
[tom@CentOS src]$ git status -s
M string_operations.c

[tom@CentOS src]$ git add string_operations.c

Status Git menunjukkan bahwa file tersebut ada di area pementasan, sekarang kembalikan dengan menggunakan perintah git checkout dan lihat status dari file yang dikembalikan.

[tom@CentOS src]$ git checkout HEAD -- string_operations.c

[tom@CentOS src]$ git status -s

Pindahkan Pointer HEAD dengan Git Reset

Setelah melakukan beberapa perubahan, Anda dapat memutuskan untuk menghapus perubahan ini. Perintah Git reset digunakan untuk mengatur ulang atau mengembalikan perubahan. Kami dapat melakukan tiga jenis operasi reset.

Diagram di bawah ini menunjukkan representasi bergambar dari perintah reset Git.

Lembut

Setiap cabang memiliki penunjuk HEAD, yang menunjuk ke komit terbaru. Jika kita menggunakan perintah reset Git dengan opsi --soft diikuti oleh ID komit, maka itu akan mengatur ulang penunjuk HEAD hanya tanpa merusak apa pun.

.git/refs/heads/masterfile menyimpan ID komit dari penunjuk HEAD. Kami dapat memverifikasinya dengan menggunakangit log -1 perintah.

[jerry@CentOS project]$ cat .git/refs/heads/master
577647211ed44fe2ae479427a0668a4f12ed71a1

Sekarang, lihat ID komit terbaru, yang akan cocok dengan ID komit di atas.

[jerry@CentOS project]$ git log -2

Perintah di atas akan menghasilkan hasil sebagai berikut.

commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary


commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 10:16:25 2013 +0530

Added compiled binary

Mari kita setel ulang penunjuk HEAD.

[jerry@CentOS project]$ git reset --soft HEAD~

Sekarang, kita hanya mengatur ulang penunjuk HEAD kembali dengan satu posisi. Mari kita periksa isi dari.git/refs/heads/master file.

[jerry@CentOS project]$ cat .git/refs/heads/master
29af9d45947dc044e33d69b9141d8d2dad37cc62

ID Komit dari file diubah, sekarang verifikasi dengan melihat pesan komit.

jerry@CentOS project]$ git log -2

Perintah di atas akan menghasilkan hasil sebagai berikut.

commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 10:16:25 2013 +0530

Added compiled binary


commit 94f7b26005f856f1a1b733ad438e97a0cd509c1a
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 10:08:01 2013 +0530

Added Makefile and renamed strings.c to string_operations.c

Campuran

Git reset dengan opsi --mixed mengembalikan perubahan tersebut dari staging area yang belum dilakukan. Ini mengembalikan perubahan dari area pementasan saja. Perubahan aktual yang dibuat pada copy pekerjaan file tidak terpengaruh. Git reset default setara dengan git reset - mixed.

keras

Jika Anda menggunakan opsi --hard dengan perintah Git reset, ini akan menghapus area pementasan; itu akan mengatur ulang penunjuk HEAD ke komit terbaru dari ID komit tertentu dan menghapus perubahan file lokal juga.

Mari kita periksa ID komit.

[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src

[jerry@CentOS src]$ git log -1

Perintah di atas akan menghasilkan hasil sebagai berikut.

commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary

Jerry memodifikasi file dengan menambahkan komentar baris tunggal di awal file.

[jerry@CentOS src]$ head -2 string_operations.c
/* This line be removed by git reset operation */
#include <stdio.h>

Dia memverifikasinya dengan menggunakan perintah git status.

[jerry@CentOS src]$ git status -s
M string_operations.c

Jerry menambahkan file yang dimodifikasi ke staging area dan memverifikasinya dengan perintah git status.

[jerry@CentOS src]$ git add string_operations.c
[jerry@CentOS src]$ git status

Perintah di atas akan menghasilkan hasil sebagai berikut.

# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#
modified: string_operations.c
#

Status Git menunjukkan bahwa file tersebut ada di area pementasan. Sekarang, setel ulang HEAD dengan - opsi keras.

[jerry@CentOS src]$ git reset --hard 577647211ed44fe2ae479427a0668a4f12ed71a1

HEAD is now at 5776472 Removed executable binary

Perintah reset git berhasil, yang akan mengembalikan file dari area pementasan serta menghapus semua perubahan lokal yang dibuat pada file.

[jerry@CentOS src]$ git status -s

Status Git menunjukkan bahwa file telah dikembalikan dari area pementasan.

[jerry@CentOS src]$ head -2 string_operations.c
#include <stdio.h>

Perintah head juga menunjukkan bahwa operasi reset juga menghapus perubahan lokal.