Git #12: Commit wybranych zmian w pliku​

Git commit wybranej części pliku. Już teraz nie musisz się martwić jeśli potrzebujesz wysłać do repozytorium tylko wybrane fragmenty pliku!

Git 12 Commit wybranych zmian z pliku

Git 12 Commit wybranych zmian z pliku


Wprowadzanie zmian do repozytorium najczęściej nam się kojarzy z wykonywaniem operacji git commit, a wcześniej add na całych plikach. Co, jednak jeśli wykonaliśmy szereg zmian, ale po dłuższym namyśle postanowiliśmy dodać do repozytorium tylko część z nich? Oczywiście zawsze można wycofać cześć zmian lub je gdzieś przekopiować, dodać plik do repozytorium, a potem przywracać usunięte zmiany… Jednak skoro to czytacie, to oznacza, że poszukujecie bardziej profesjonalnych rozwiązań.

Przygotowanie repozytorium

Na początek stwórzmy folder z dowolną nazwą, np. commit_part, a następnie dodajmy tam pusty plik sample.py:

qabrio@shserver:~$ mkdir commit_part
qabrio@shserver:~$ cd commit_part
qabrio@shserver:~/commit_part$ touch sample.py

Zapiszmy teraz do tego pliku skrypt obliczający elementy ciągu Fibbonacciego:

    n_fib = int(input("Provide number:  "))
     
    n1, n2 = 0, 1
    count = 0
     
    if nterms <= 0:
       print("Wrong number priovided! It should be poditive number.")
    elif n_fib == 1:
       print(f"Fibonacci sequence for {n_fib}:")
       print(n1)
    else:
       print(f"Fibonacci sequence for {n_fib}:")
       while count < n_fib:
           print(n1)
           nth = n1 + n2
           n1 = n2
           n2 = nth
           count += 1

Mając tak przygotowany plik, zainicjujmy nowe repozytorium i dodajmy do niego stworzony plik:

qabrio@shserver:~/commit_part$ git init
qabrio@shserver:~/commit_part$ git add sample.py
qabrio@shserver:~/commit_part$ git commit -m 'first commit'

Wprowadzanie zmian

Wprowadźmy teraz kilka zmian w naszym pliku. Pierwszą zmianą będzie wprowadzenie komentarzy, kolejną dodanie opisu do wyświetlanej liczby:

    # Script to calculate elementsof Fibonacci sequence
     
    n_fib = int(input("Provide number:  "))
     
    # initial values
    n1, n2 = 0, 1
    count = 0
     
    # main part of script
    # it have to be a positive number to calculate
    if nterms <= 0:
       print("Wrong number priovided! It should be poditive number.")
    elif n_fib == 1:
       print(f"Fibonacci sequence for {n_fib}:")
       print(n1)
    else:
       print(f"Fibonacci sequence for {n_fib}:")
       while count < n_fib:
           print(f"Element {count}: {n1}")
           nth = n1 + n2
           n1 = n2
           n2 = nth
           count += 1

Wprowadzanie zmian

Mając tak przygotowany plik oraz wprowadzone zmiany, uznajemy, że chcemy wrzucić do repozytorium jedynie ostatnią zmianę, związaną z funkcją print. Możemy to wykonać poprzez użycie standardowego polecenia add, jednak z dodatkową flagą -p (–patch):

qabrio@shserver:~/commit_part$ git add -p sample.py 

W naszym przypadku zostaniemy najpierw zapytani o pierwszą część zmian w pliku:

diff --git a/sample.py b/sample.py
index 7f98428..fd0ce72 100644
--- a/sample.py
+++ b/sample.py
@@ -1,8 +1,13 @@
+# Script to calculate elementsof Fibonacci sequence
+
 n_fib = int(input("Provide number:  "))
 
+# initial values
 n1, n2 = 0, 1
 count = 0
 
+# main part of script
+# it have to be a positive number to calculate
 if nterms <= 0:
    print("Wrong number priovided! It should be poditive number.")
 elif n_fib == 1:
Stage this hunk [y,n,q,a,d,j,J,g,/,s,e,?]? 

A po wybraniu ‚n’ (z racji, że tych zmian nie chcemy wprowadzać do repozytorium), o kolejną: 

@@ -11,7 +16,7 @@ elif n_fib == 1:
 else:
    print(f"Fibonacci sequence for {n_fib}:")
    while count < n_fib:
-       print(n1)
+       print(f"Element {count}: {n1}")
        nth = n1 + n2
        n1 = n2
        n2 = nth
Stage this hunk [y,n,q,a,d,K,g,/,e,?]? 

W drugiej części mamy zmiany, które nas interesują, w związku z tym potwierdzamy wybór poprzez ‚y’. Teraz możemy łatwo sprawdzić, że tylko wybrane zmiany zostały dodane, a niechciane dalej czekają w kolejce. Uzyjemy do tego polecenie git diff:

qabrio@shserver:~/commit_part$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)
 
	modified:   sample.py
 
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)
 
	modified:   sample.py
 
qabrio@shserver:~/commit_part$ git diff sample.py
diff --git a/sample.py b/sample.py
index f329f18..fd0ce72 100644
--- a/sample.py
+++ b/sample.py
@@ -1,8 +1,13 @@
+# Script to calculate elementsof Fibonacci sequence
+
 n_fib = int(input("Provide number:  "))
 
+# initial values
 n1, n2 = 0, 1
 count = 0
 
+# main part of script
+# it have to be a positive number to calculate
 if nterms <= 0:
    print("Wrong number priovided! It should be poditive number.")
 elif n_fib == 1:

Jak się poruszać

Teraz może kilka słów na temat, co oznaczają najwazniejsze skróty podczas wyboru zmian w obrębie pliku:

  • y – dodaj zmiany
  • n – pomin zmiany
  • a – dodaj pokazane zmiany oraz wszystkie kolejne
  • d – pomin te zmiany oraz wszystkie kolejne
  • e – wejdź w tryb edycji zmian
  • q – przerwij
  • ? – wyświetl pomoc

Myślę, że wspomniane skróty powinny być wystarczające do podstawowego użycia. Jeśli jednak jesteście ciekawi pozostałych, odsyłam do dokumentacji danej komendy poprzez wykonanie polecenia:

git add --help

Mam nadzieję, że opisana dzisiaj funkcja przyda się w praktyce, a tym samym ułatwi pracę i oszczędzi czas. Jeśli spodobał Ci się artykuł, pamiętaj, aby zapisać się do naszego newslettera!

close

Newsletter