Git - Hataları Düzeltin

Hata yapmak insandır. Dolayısıyla her VCS, hataları belirli bir noktaya kadar düzeltmek için bir özellik sunar. Git, yerel depoda yapılan değişiklikleri geri almak için kullanabileceğimiz bir özellik sağlar.

Kullanıcının yanlışlıkla yerel deposunda bazı değişiklikler yaptığını ve ardından bu değişiklikleri geri almak istediğini varsayalım. Bu gibi durumlarda,revert operasyon önemli bir rol oynar.

Gerçekleştirilmemiş Değişiklikleri Geri Al

Jerry'nin yerel deposundaki bir dosyayı yanlışlıkla değiştirdiğini varsayalım. Ancak yaptığı değişikliği geri almak istiyor. Bu durumu halletmek için,git checkoutkomut. Bir dosyanın içeriğini geri döndürmek için bu komutu kullanabiliriz.

[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

Ayrıca, kullanabiliriz git checkoutyerel depodan silinmiş bir dosya almak için komut. Tom'un yerel depodan bir dosya sildiğini ve bu dosyayı geri istediğimizi varsayalım. Bunu aynı komutu kullanarak başarabiliriz.

[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 mektubu gösteriyor Ddosya adından önce. Bu, dosyanın yerel depodan silindiğini gösterir.

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

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

[tom@CentOS src]$ git status -s

Note - Taahhüt öncesi tüm bu işlemleri gerçekleştirebiliriz.

Hazırlık Alanından Değişiklikleri Kaldır

Bir ekleme işlemi yaptığımızda, dosyaların yerel depodan belirleme alanına taşındığını gördük. Bir kullanıcı yanlışlıkla bir dosyayı değiştirir ve bunu hazırlama alanına eklerse, değişikliklerini geri alabilir.git checkout komut.

Git'te, her zaman en son yürütmeyi gösteren bir HEAD işaretçisi vardır. Aşamalı alandaki bir değişikliği geri almak istiyorsanız, git checkout komutunu kullanabilirsiniz, ancak checkout komutuyla ek bir parametre, yani HEAD işaretçisi sağlamanız gerekir. Ek tamamlama işaretçisi parametresi, git checkout komutuna çalışma ağacını sıfırlama ve ayrıca aşamalı değişiklikleri kaldırması talimatını verir.

Tom'un yerel deposundaki bir dosyayı değiştirdiğini varsayalım. Bu dosyanın durumunu görüntülersek, dosyanın değiştirildiğini ancak hazırlama alanına eklenmediğini gösterecektir.

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

Git durumu, dosyanın hazırlama alanında bulunduğunu gösterir, şimdi git checkout komutunu kullanarak dosyayı geri döndürün ve geri alınan dosyanın durumunu görüntüleyin.

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

[tom@CentOS src]$ git status -s

HEAD İşaretçisini Git Sıfırlama ile Taşı

Birkaç değişiklik yaptıktan sonra, bu değişiklikleri kaldırmaya karar verebilirsiniz. Git sıfırla komutu, değişiklikleri sıfırlamak veya geri almak için kullanılır. Üç farklı sıfırlama işlemi gerçekleştirebiliriz.

Aşağıdaki şema Git sıfırlama komutunun resimli temsilini göstermektedir.

Yumuşak

Her dalda, en son kaydetmeyi gösteren bir HEAD işaretçisi vardır. Git reset komutunu --soft seçeneğiyle ve ardından commit ID ile kullanırsak, HEAD işaretçisini yalnızca hiçbir şeyi yok etmeden sıfırlayacaktır.

.git/refs/heads/masterdosya HEAD işaretçisinin kaydetme kimliğini depolar. Bunu kullanarak doğrulayabilirizgit log -1 komut.

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

Şimdi, yukarıdaki kaydetme kimliğiyle eşleşen en son kaydetme kimliğini görüntüleyin.

[jerry@CentOS project]$ git log -2

Yukarıdaki komut aşağıdaki sonucu verecektir.

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

HEAD işaretçisini sıfırlayalım.

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

Şimdi, HEAD işaretçisini bir konum geri sıfırlıyoruz. İçeriğini kontrol edelim.git/refs/heads/master file.

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

Dosyadaki Commit ID değiştirildi, şimdi commit mesajlarını görüntüleyerek doğrulayın.

jerry@CentOS project]$ git log -2

Yukarıdaki komut aşağıdaki sonucu verecektir.

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

karışık

--Mixed seçeneğiyle Git sıfırlaması, henüz kaydedilmemiş olan aşamalandırma alanından bu değişiklikleri geri alır. Değişiklikleri yalnızca evreleme alanından geri alır. Dosyanın çalışan kopyasında yapılan fiili değişiklikler etkilenmez. Varsayılan Git sıfırlaması, git reset - mixed ile eşdeğerdir.

zor

Git reset komutuyla --hard seçeneğini kullanırsanız, hazırlama alanını temizler; HEAD işaretçisini belirli kesinleştirme kimliğinin en son yürütmesine sıfırlar ve yerel dosya değişikliklerini de siler.

Kayıt kimliğini kontrol edelim.

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

[jerry@CentOS src]$ git log -1

Yukarıdaki komut aşağıdaki sonucu verecektir.

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

Removed executable binary

Jerry, dosyanın başlangıcına tek satırlık açıklama ekleyerek bir dosyayı değiştirdi.

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

Git status komutunu kullanarak doğruladı.

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

Jerry, değiştirilen dosyayı hazırlama alanına ekler ve git status komutuyla doğrular.

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

Yukarıdaki komut aşağıdaki sonucu verecektir.

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

Git durumu, dosyanın hazırlama alanında mevcut olduğunu gösteriyor. Şimdi, HEAD'i - sert seçenekle sıfırlayın.

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

HEAD is now at 5776472 Removed executable binary

Git reset komutu başarılı oldu; bu, dosyayı hazırlama alanından geri döndürür ve dosyada yapılan yerel değişiklikleri kaldırır.

[jerry@CentOS src]$ git status -s

Git durumu, dosyanın hazırlama alanından geri alındığını gösteriyor.

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

Head komutu ayrıca sıfırlama işleminin yerel değişiklikleri de kaldırdığını gösterir.