Git: —patch ve manual hunk modu

status
Published
date
Jul 13, 2021
slug
git-patch-ve-manual-hunk-modu
Published
tags
summary
Git ile commit öncesi değişiklikleri eklerken bir dosyadaki değişikliklerin tümünü değil, bir kısmını almak için --patch parametresini kullanabiliriz: git add -p veya git add --patch
type
Post
Git ile commit öncesi değişiklikleri eklerken bir dosyadaki değişikliklerin tümünü değil, bir kısmını almak için --patch parametresini kullanabiliriz: git add -p veya git add --patch
Komut gönderildikten sonra değişiklikleri parçalar halinde kademeli olarak ve interaktif bir biçimde aşağıdaki kısayollarla işleyebiliriz.
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
Değişiklikler parçalar (hunk) halinde ekrana yansıyacaktır. Bir dosyadaki bir değişiklik bir parça olarak kabul edilebileceği gibi, dosya içinde birden fazla değişiklik parçası da bulunabilir. Standart kullanımlar dışında, j ve k kısayolları ile mevcut değişiklik parçasını kontrol için sona atabiliriz.
Eğer bir dosyada yapılan değişiklik, farklı commitlerde bulunması gereken değişiklikler ise s ile değişiklik parçası daha küçük parçalara ayrılarak işleme alınabilir. Fakat bazı durumlarda daha küçük parçalara ayırma otomatik olarak yapılamaz, bu durumda da e ile mevcut değişiklik parçasını elle düzeltmek için manual hunk modunu kullanmamız gerekir. Düzeltme işlemi için vi-based bir editör kullanmak gerekiyor.
# Manual hunk edit mode -- see bottom for a quick guide.
@@ -2,7 +2,8 @@

  // Production
  -const ENDPOINT = "127.0.0.1";
  -const HTTP_PORT = 4004;
  +const ENDPOINT = "localhost";
  +const HTTP_PORT = 5000;

# ---
# To remove '-' lines, make them ' ' lines (context).
# To remove '+' lines, delete them.
# Lines starting with # will be removed.
#
# If the patch applies cleanly, the edited hunk will immediately be
# marked for staging.
# If it does not apply cleanly, you will be given an opportunity to
# edit again.  If all lines of the hunk are removed, then the edit is
# aborted and the hunk is left unchanged.
Açıklamada yazdığı üzere; kaydedilmesini istemediğimiz değişiklikler, eğer silinmiş birer satırlarsa başlarındaki - karakterini boşluk olarak, eklenmiş satırlar ise satırların kendisini tamamen silmemiz gerekiyor. r<Space> ile karakteri değiştirebiliriz, dd ile imlecin bulunduğu satırı silebiliriz.
Örneğin yukarıdaki kod örneğinde yalnızca ENDPOINT için yapılan değişikliğin dikkate alınmasını istiyorsak, dosyanın son hali aşağıdaki gibi olmalı.
# Manual hunk edit mode -- see bottom for a quick guide.
@@ -2,7 +2,7 @@

// Production
-const ENDPOINT = "127.0.0.1";
 const HTTP_PORT = 4004;
+const ENDPOINT = "localhost";
Bu değişklik sonrasında :wq! komutu ile değişiklik kaydedilerek ekleme işlemi yapılır. Eğer ki yanlış bir işlem yapılmışsa, yapılan yamanın başarısız olduğuna dair bir hata gösterilir ve işlemin yeniden yapılması istenir.
Manual hunk modunu kullanmak, proje üzerinde aynı anda birden fazla farklı değişiklikler yapmaya ve değişiklikleri gönderirken daha spesifik ve doğru commitler göndermemize yardımcı olabilir.

© Samet 2017 - 2024