Skip to content

Patch Mode’da Ekleme: git add -p

Belkide GIT’in yapılma sebeplerinden biri Patching. Linus Torvalds, Linux kernel’i geliştirirken, diğer katkı yapan developerlar, yaptıklarını e-posta ile patch formatında yolluyorlarmış.

Bu e-postalarla mücadele etmek, gelenleri kontrol etmek, bir tür review işleminden geçirmek vs çok zahmetli işler. GIT bu durum için özel bir seçeneğe sahip.

$ echo 'file information 1' > file-info-1.txt
$ echo 'file information 2' > file-info-2.txt
$ ls
README.md
file-info-1.txt
file-info-2.txt
file1.txt
file2.txt

$ git add .
$ git status

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

    new file:   file-info-1.txt
    new file:   file-info-2.txt

$ git commit -m 'added two info files for demo purposes'

Şimdi, file-info-1.txt dosyasına bir-kaç satır ekleyelim:

$ echo 'added new line' >> file-info-1.txt
$ echo 'added one more new line' >> file-info-1.txt
$ git status

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   file-info-1.txt

no changes added to commit (use "git add" and/or "git commit -a")

Şimdi patch mode’a geçelim:

$ git add -p

diff --git a/file-info-1.txt b/file-info-1.txt
index 833822e8a04b..a333d502478e 100644
--- a/file-info-1.txt
+++ b/file-info-1.txt
@@ -1 +1,3 @@
 file information 1
+added new line
+added one more new line
Stage this hunk [y,n,q,a,d,/,e,?]?

GIT, bildiği son hali ile yeni değişikliğin arasını bize diff ile gösteriyor ve soruyor. Bu hunk’ı yani parçayı ne yapayım?

  • y : YES, bu hunk’ı al.
  • n : NO, bu hunk’ı alma.
  • q : QUIT, hiçbir şey yapmadan çık ve devam etme.
  • a : ALL, bu hunk dahil, dosyadaki diğer tüm hunk’ları al.
  • d : DON’T, bu hunk dahil, diğer tüm hunk’ları alma.
  • / : SEARCH, girilecek REGEX paternine göre hunk ara.
  • e : EDIT, elle hunk’ı düzenle.
  • ? : HELP, yardım için.

Ben a yapıyorum ve git status:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   file-info-1.txt

Bu yöntem kodu tekrar gözden geçirme imkanı verdiği gibi, son dakikada bir şeyleri düzeltme değiştirme şansı da veriyor.

Bu patch modu aslında çaktırmadan git add -i yapıyor ve direk olarak oradaki patch seçeneğini açıyor. Daha fazla bilgi almak için git help add demek mümkün.