Git #12: Commit wybranych zmian w pliku​
  • Post author:
  • Post published:20 kwietnia 2021
  • Post category:Git

Git #12: Commit wybranych zmian w pliku

Poziom trudności
2/5

Wprowadzanie zmian do repozytorium najczęściej nam się kojarzy z wykonywaniem operacji 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:

  1. n_fib = int(input("Provide number: "))
  2. n1, n2 = 0, 1
  3. count = 0
  4. if nterms <= 0:
  5. print("Wrong number priovided! It should be poditive number.")
  6. elif n_fib == 1:
  7. print(f"Fibonacci sequence for {n_fib}:")
  8. print(n1)
  9. else:
  10. print(f"Fibonacci sequence for {n_fib}:")
  11. while count < n_fib:
  12. print(n1)
  13. nth = n1 + n2
  14. n1 = n2
  15. n2 = nth
  16. 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:

  1. # Script to calculate elementsof Fibonacci sequence
  2. n_fib = int(input("Provide number: "))
  3. # initial values
  4. n1, n2 = 0, 1
  5. count = 0
  6. # main part of script
  7. # it have to be a positive number to calculate
  8. if nterms <= 0:
  9. print("Wrong number priovided! It should be poditive number.")
  10. elif n_fib == 1:
  11. print(f"Fibonacci sequence for {n_fib}:")
  12. print(n1)
  13. else:
  14. print(f"Fibonacci sequence for {n_fib}:")
  15. while count < n_fib:
  16. print(f"Element {count}: {n1}")
  17. nth = n1 + n2
  18. n1 = n2
  19. n2 = nth
  20. count += 1

Wybieranie 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:

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!

Git #12: Commit wybranych zmian w pliku​ image